iOS爱上底层-类的结构

288 阅读1分钟

类的结构都有些什么?

创建一个NSObject,并点进去我们会看见:

继续点击Class isa的Class,我们会看见:
再次点击objc_class,我们会看见:
由此我们可以发现:
1、objc_class是一个结构体,所以类的本质就是一个结构体。
2、objc_class继承于objc_object。
3、objc_class结构体里面有isa、superclass、cache和bits(点击上面的objc_object,我们就可以看见,isa在父类objc_object里)。
4、NSObject就是一个类,在底层就是objc_class。
5、NSObject是OC类型,objc_object是C类型,也就是说NSObject对objc_object进行了封装。

类的信息都存在哪?

我们根据return bits.data()猜测类的信息都存储在bits里面,下面我们就验证一下猜测是否是对的。先打上断点并运行下面的代码,然后通过LLDB指令查看类信息。
验证实例方法存储的位置:
验证实例变量与成员变量的位置:
验证类方法的存储位置
放上Person.h的代码内容:

总结

1、类的成员变量、实例变量和实例方法,都是存在bits里面。
2、类方法是存在元类的bits里面。类方法在元类里面也是实例方法。