美文网首页
iOS Objective-C isa 走位分析

iOS Objective-C isa 走位分析

作者: just东东 | 来源:发表于2020-12-02 17:45 被阅读0次

    iOS Objective-C isa 走位分析

    1. 判断isa是对象的第一个属性

    isa<-->cls的关联 (类和对象的关系)


    image

    可以看出类的指针与类对象第一个属性去掉低3位与高17位的值是完全一样的。同时也验证了:isa的 shiftcls 存储的是类指针的值。

    通过object_getClass获取类,


    image
    Class object_getClass(id obj)
    {
        if (obj) return obj->getIsa();
        else return Nil;
    }
    
    inline Class  objc_object::getIsa() 
    {
        if (!isTaggedPointer()) return ISA();
        ·····
    }
    
    inline Class  objc_object::ISA() 
    {
    #if SUPPORT_INDEXED_ISA
    ·····
    #else
        return (Class)(isa.bits & ISA_MASK); //(isa.bits & ISA_MASK)
    #endif
    }
    

    类和对象通过isa关联,isa为类对象的第一个属性。

    2.isa 的指向分析

    isa的终极指向分析:


    image

    结论:

    • 对象 - 程序员根据类 -> 实例化
    • 类 - 代码写出来的 - 内存只有一份 - 不是我创建 - 系统
    • 元类 - 系统编译的 - 发现有了这么一个类 - 系统也同时创建了
    • 对象 -> 类对象 -> 元类 -> 根元类 -> 根元类
    • NSObject/NSProxy: 根类 -> 根元类

    经典图解:(图中虚线代表isa指向关系,实线代表类的继承关系。)


    image

    <font color=Red>其中NSObject根元类继承自NSObject,NSObject继承自nil蓝色</font>

    相关文章

      网友评论

          本文标题:iOS Objective-C isa 走位分析

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