对isa的理解

图1.png

我们可以从图1看到 NSObject有一个属性isa用Class来定义,那么我点击Class接着看


图2.png

我们可以从图2可以看到Class是objc_class的一个指针,那么我们可以认为图1的isa是一个类对象,由于类是一个类对象,我们可以认为他是另外一个类的单利,那么这个类我们称为元类,点击objc_class接着看元类如何定义
我们点击objc_class点击查看


图3.png

图3我们可以看到也有一个isa 他会指向根元类, 根元类会指向自己

总结:
每一个实例对象里面都有一个isa指针,指向class类对象;

每一个class类对象里面有一个isa指针,指向metaclass元类对象;
每一个class类对象里面有一个superclass指针,指向其父类的class类对象;其父类的class类对象里面也有一个superclass指针,指向根类对象;根类对象中的superclass指针为nil(而不是第二张图中的没有);

每一个metaclass元类对象里面有一个superclass指针,指向其父类的metaclass元类对象;最终指向RootMetaClass,RootMetaClass的superclass指针指向NSObject,即根类
每一个metaclass元类对象有一个isa指针,指向根元类对象;根元类对象的isa指针指向自己;

class类对象中的objc_method_list为对象方法;
metaclass元类中存放的objc_method_list是类方法;

推荐阅读更多精彩内容