美文网首页iOS逆向
OC对象的分类

OC对象的分类

作者: Jason_YZC | 来源:发表于2018-12-04 15:42 被阅读10次

    OC对象主要分为3种:

    • instance对象(实例对象)
    • class对象 (类对象)
    • meta-class对象 (元类对象)

    instance对象:

    instance对象就是通过类alloc出来的对象,每次调用alloc都会产生新的instance对象

     NSObject *object1 = [[NSObject alloc] init];
     NSObject *object2 = [[NSObject alloc] init];
    

    object1object2NSObjectinstance对象
    它们是两个不同的对象,分别占据两块不同的内存。

    instance对象在内存中存储的信息

    • isa指针
    • 其他成员变量

    class对象:

     NSObject *object1 = [[NSObject alloc] init];
     NSObject *object2 = [[NSObject alloc] init];
     Class objectClass1 = [object1 class];
     Class objectClass2 = [object2 class];
     Class objectClass3 = [NSObject class];
     Class objectClass4 = object_getClass(object1); //Runtime API
     Class objectClass5 = object_getClass(object2); //Runtime API
    

    其中 objectClass1 ~ objectClass5都是NSObjectclass对象
    它们是同一个对象,每个类在内存中有且只有一个class对象

    class对象在内存中存储的信息

    • isa指针
    • superClass指针
    • 类的属性信息(@property)、类的方法信息(instance method
    • 类的协议信息(protocol)、类的成员变量(ivar
    • 其他...

    meta-class

    Class objectMetaClass = object_getClass([NSObject class]); //Runtime API
    

    objectMetaClassNSObjectmeta-class对象
    每个类在内存中有且只有一个meta-class对象

    meta-class对象和class对象内存结构是一样的,但是用途不一样,在内存中存储的信息主要有:

    • isa指针
    • superClass指针
    • 类的类方法信息(class method
    • 其他...

    注意:

    Class objectClass3 = [[NSObject class] class];
    

    以上方式获取是类对象,不是元类对象,

    BOOL result = class_isMetaClass([NSObject class]);
    

    查看Class是否为meta-class

    相关文章

      网友评论

        本文标题:OC对象的分类

        本文链接:https://www.haomeiwen.com/subject/hzzmcqtx.html