美文网首页
02 OC对象的分类

02 OC对象的分类

作者: 小的小碰撞 | 来源:发表于2019-05-26 12:20 被阅读0次

    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
    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);
    
    Class objectClass5 = object_getClass(object2);
    
    • objectClass1 ~ objectClass5 都是NSObject的class对象 (类对象)

    • 它们是同一个对象。每个类在内存中有且只有一个class对象

    • class对象在内存存储的信息主要包括

      • isa指针
      • superclass指针
      • 累的属性信息(@property) 、类的对象方法信息(instance method)
      • 类的协议信息(protocol)、 累的成员变量信息(ivar)
    meta-class (元类对象)
    Class objectMetaClass = object_getClass([NSObject class]);
    
    • objectMetaClass是NSObject的meta-class对象

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

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

      • isa 指针
      • superclass 指针
      • 类的类方法信息 (class method)
    • 以下代码获取objectClass是class对象,并不是meta-class对象
    Class objectClass = [[NSObject alloc] init] ;
    
    • 查看Class是否为meta-class
    BOOL result = class_isMetaClass([NSObject class]);
    
    • Class objc_getClass (const char *aClassName)

      • 传入字符串类名
      • 返回对应的类对象
    • Class object_getClass (id obj)

      • 1> 传入的obj 可能是instance对象,class对象、meta-class对象
      • 2>返回值
      • 如果是instance对象,返回class对象
        -如果是class对象,返回meta-class对象
      • 如果是meta-class对象,返回NSObject(基类)的meta-class对象
    • -(Class)class、 + (Class)class

      • 返回的就是类对象
    • -(Class) {
      return self -> isa;
      }

    • +(Class) {
      return self;
      }

    相关文章

      网友评论

          本文标题:02 OC对象的分类

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