美文网首页
OC对象的分类

OC对象的分类

作者: 冰棍儿好烫嘴 | 来源:发表于2023-03-14 22:13 被阅读0次

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

    instance(实例对象)

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

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

    object1、object2是NSObject的instance对象(实例对象),他们是不同的两个对象,分别占据着两块不同的内存。instance对象在内存中存储的信息包括:isa指针、其他成员变量

    class(类对象)一个类的类对象在内存中是一份

    • objectClass1~objectClass5都是NSObject的class对象(类对象)
    • 它们是同一个对象,每个类在内存中有且只有一个class对象
    • class(类对象)在内存中存储的信息主要包括:
      isa指针
      superclass指针
      类的属性信息(@property)、类的对象方法信息(instance method)
      类的协议信息(protocol)、类的成员变量信息(ivar)
      ......

    meta-class对象(元类对象)

    • objectMetaClass是NSObject的meta-class对象(元类对象)
    • 每个类在内存中有且只有一个meta-class对象
    • meta-class对象和class对象的内存结构是一样的,但是用途不一样,在内存中存储的信息主要包括
      isa指针
      superclass指针
      类的类方法信息(class method)
      ......
    //instance对象,实例对象
    NSObject *object1 = [[NSObject alloc] init];
    NSObject *object2 = [[NSObject alloc] init];
            
    //class对象,类对象
    Class objectClass1 = [object1 class];
    Class objectClass2 = [object2 class];
    Class objectClass3 = object_getClass(object1);
    Class objectClass4 = object_getClass(object2);
    Class objectClass5 = [NSObject class];
            
     //meta-class对象,元类对象
     //将类对象作为参数传入,获得元类对象
    Class objectMetaClass = object_getClass([NSObject class]);
            
    NSLog(@"instance = %p  %p",object1,object2);
            
    NSLog(@"class = %p  %p  %p  %p  %p",objectClass1,objectClass2,objectClass3,objectClass4,objectClass5);
           
    NSLog(@"meta-class = %p",objectMetaClass);
    
    打印结果:
    2023-03-15 21:45:20.201798+0800 Objective本质[87660:123599346] instance = 0x600000c70140  0x600000c70150
    2023-03-15 21:45:20.204894+0800 Objective本质[87660:123599346] class = 0x109124310  0x109124310  0x109124310  0x109124310  0x109124310
    2023-03-15 21:45:20.204996+0800 Objective本质[87660:123599346] meta-class = 0x1091242c0
    

    相关文章

      网友评论

          本文标题:OC对象的分类

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