美文网首页
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