iOS Objective-C isa 走位分析

2020-12-02  本文已影响0人  just东东

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

结论:

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


image

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

上一篇 下一篇

猜你喜欢

热点阅读