OC底层原理之《isa - 类的底层原理结构01》

一、类isa链走向

1.以下图为例,让我们继续探索

首先在控制台x/4gx输出p
通过之前分析isa结构体得出x86_64的掩码为0x00007ffffffffff8ULL
通过isa地址与上掩码地址得到了当前类JPerson的地址。说明了isa最终指向了当前类。
接下来让我们探索当前类的内存结构
控制台输出x/4gx 0x0000000100008360
通过类的isa地址与上掩码得到的内存地址打印同样是JPerson
从上图可知两个不同的地址打印的都是JPerson。这里我们猜想
(1)类会不会和我们的对象一样可以无限去开辟,内存中不止一个类
接下来让我们去验证一下

从上图可知一直类的输出方式中,所输出的地址都是一样的都是0x100008360,那么0x0000000100008338 是什么呢,这里我们利用MachOView这里应用程序来辅助分析一下。

利用MachOView应用程序打开Products目录下的终端文件

通过搜索class 我们可以看到如下图

我们的地址0x0000000100008338在哪里呢。看图中的选中。

从这里我们可以看出0x0000000100008338的类型是元类


从下图可以得出结论元类的isa指向根元类的isa,根元类的isa指向本身

isa链走向总结

对象的isa 指向类的isa 类的isa指向元类 元类的isa指向根元类

二、类的继承链走向

image

通过上图我们可以看出JTeacher的元类对象的父类地址等于JPerson的元类对象地址,JPerson的元类对象的父类地址等于NSObject的元类对象的地址,而NSObject的元类对象的父类地址则等于NSObject本身。

继承链走向总结

最终总结

instance 的 isa 指向 class

class 的 isa 指向 meta-class

meta-class 的 isa 指向基类的meta-class

class 的 superClass 指向父类的class
如果没有父类,superClass 为nil

meta-class 的superClass 指向父类的 meta-class

基类的元类对象的superClass 指向基类的class

方法分析在这里 isa - 类的底层原理结构02

和谐学习,不急不躁。

不积跬步无以至千里。

春风十里不如你,我在风里雨里雪里等你。

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

推荐阅读更多精彩内容