美文网首页
iOS底层原理 -- 对象的分类

iOS底层原理 -- 对象的分类

作者: X_L_F | 来源:发表于2018-12-08 19:41 被阅读10次
    OC对象分类
    • 实例对象
    • 类对象
    • 元类对象
    // main.m
    #import <Foundation/Foundation.h>
    #import <objc/runtime.h>
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            /**
            *  object_getClass方法是获取对象的对象
            */
            NSObject *objc = [[NSObject alloc] init];    // 实例
            Class class = [objc class];        // 类对象
            Class metaClass =  object_getClass(class);    // 元类对象
            NSLog(@"%p, %p, %p", objc, class, metaClass);
        }
        return 0;
    
    }
    
    result: 0x102a02690, 0x7fffb120c140, 0x7fffb120c0f0
    

    通过上述方法可以获知三个对象的内存地址不同,即对应的三种对象。

    对象存放的信息
    1. 实例对象
      存放成员变量的具体指
    2. 类对象
      存放属性(如属性的命名、类型等)、对象方法、协议等信息
    3. 元类对象
      存放类方法

    实际上类对象与元类对象结构一样,但作用不用。即元类对象中也含有属性、协议等内存空间。但是不起作用罢了。

    isa指针与superclass指针
    isa指针与superclass指针

    以问题的形式,总结如下
    is 指针指向哪里?

    1. 实例对象isa指针指向类对象
    2. 类对象isa指针指向元类对象
    3. 元类对象isa指针指向基类的元类对象
    4. 基类元类对象的isa指针指向自己

    superclass 指针指向哪里?

    1. 实例对象superclass指针指向父类
    2. 类对象superclass指针指向父类
    3. 基类类对象superclass 为nil。(即无父类,superclass为nil)
    4. 元类对象superclass指针指向父类
    5. 基类元类对象superclass指向基类类对象。

    相关文章

      网友评论

          本文标题:iOS底层原理 -- 对象的分类

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