• 关于OC对象种类的分类


    OC对象的种类

    Objective-C中的对象,主要可以分3种: instance对象(实例对象)、class对象(类对象)、meta-class对象(元类对象)

    instance对象

    instance对象就是通过类alloc出来的对象,每次通过alloc都会产生新的instance对象 instance对象在内存中存储的信息包括isa指针、具体成员变量的值

    class对象

    每个类在内存中有且只有一个class对象 call对象在内存中存储的信息主要包括:isa指针、superclass指针、类的属性信息(@property)、类的对象方法信息(instance method)、类的协议信息(protocol)、类的成员变量信息(ivar)

    meta-class

    objectMetaClass是NSObject的meta-class对象(元类对象),每个类在内存中有且只有一个meta-class对象。meta-class对象和class对象的内存结构是一样,但是用途不一样,在内存中存储的信息主要存储isa指针、superclass指针、类的类方法信息

    可以通过如下代码获取Class对象的元类:

    Class objectClass = object_getClass([NSObject class]);

    isa指针

    instance的isa指向class

    当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用

    class的isa指向meta-class

    当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用

    class对象的superclass指针

    当Student的instance对象要调用Person的对象方法时,会先通过isa找到Student的class, 然后通过superclass找到Person的class,最后找到对象方法的实现进行调用

    meta-class对象的superclass指针

    当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class,最后找到类方法的实现进行调用

     

  • 相关阅读:
    572.Subtree of Another Tree
    35.Search Insert Position(二分查找)
    198.House Robber(dp)
    724.Find Pivot Index
    705.Design HashSet
    求连通分量(深搜)
    删边(normal)
    叠放箱子问题
    数字游戏
    火车票
  • 原文地址:https://www.cnblogs.com/muzichenyu/p/14002817.html
Copyright © 2020-2023  润新知