一、类isa链走向
1.以下图为例,让我们继续探索
接下来让我们探索当前类的内存结构
控制台输出x/4gx 0x0000000100008360
(1)类会不会和我们的对象一样可以无限去开辟,内存中不止一个类
接下来让我们去验证一下
从上图可知一直类的输出方式中,所输出的地址都是一样的都是0x100008360,那么0x0000000100008338 是什么呢,这里我们利用MachOView这里应用程序来辅助分析一下。
利用MachOView应用程序打开Products目录下的终端文件
通过搜索class 我们可以看到如下图
从这里我们可以看出0x0000000100008338的类型是元类
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