美文网首页
OC对象的本质

OC对象的本质

作者: MrHardy | 来源:发表于2021-06-18 15:16 被阅读0次

首先我们先定义一个类

猜想“当前的类会和我们的对象一样,可以无限开辟吗?也就是在内存里不止有一个类?”

下面我们开始验证,这几个地址是否一致?

打印的结果居然都一致,但0x100008360-它不是类,那它是什么呢?

我们首先得知道 对象的isa 指向 类,类的isa 指向 元类(元类是由系统生成和编译的),那元类的isa呢?指向什么?

下面用p/x 指令依次往下,可以得出根类的isa 指向 根元类isa,如下图所示:

上代码

打印的结果

得出结论:元类的父类就是当前的根元类

继续探索

输出

NSObject - 0x7fff806fdfe0
HLPerson - 0x100008338

是出问题了吗?怎么和见上图的指向判断不一致的?

HLTeacher 继承-> HLPerson 继承-> NSObject 这样一条继承链

元类也有一条继承链

元类的继承链

还有一个问题就是只要到NSOject的时候就会有特殊情况

输出
(null) - 0x0

NSObject - 0x7fff806fe008

NSObject - 0x7fff806fe008  和上面的类是一样的,又回到了原点。又回到了NSObject。

接着看官方的isa流程图

未完待续......

相关文章

网友评论

      本文标题:OC对象的本质

      本文链接:https://www.haomeiwen.com/subject/hadkyltx.html