对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是类方法;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先说明,这篇文章几乎都是抄录的别人的博客,简书文章,在此总结,只是为了方便记忆和以后阅读,如果有什么失礼的地方,...
    LiYaoPeng阅读 5,077评论 1 14
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 2,235评论 0 7
  • 转载自https://mp.weixin.qq.com/s/B4Z-7YQ8CMhZ0kCrxe3XAg 欲诚其意...
    碧玉小瑕阅读 573评论 1 1
  • Class数据结构: getIsa( ) 为获取 isa 指向的类,isa 指向的类是对象的真实类型。 objc_...
    小李不木阅读 1,776评论 0 1
  • Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的...
    有一种再见叫青春阅读 620评论 0 3