【iOS重学】窥探Class的结构
写在前面
本文主要探究Class
的内部结构,博主这里使用的objc4的源码版本是objc4-838
,建议大家在看的时候可以下载最新源码。
Class的结构
在前面关于isa和superclass文章中,我们提到了类对象和元类对象的类型都是Class
,内存里面保存的是:
. isa指针
. superclass指针
. 属性信息
. 对象方法信息
. 协议信息
. 成员变量信息
今天我们就来剖析一下Class
的内部结构,验证一下是不是存放的这些信息,废话不多说了,我们现在就开始吧。
Class
是个objc_class
类型的结构体,如下:
typedef struct objc_class *Class; |
在objc4
源码objc-runtime-new.h
文件中,对objc_class
定义如下:
因为objc_class
结构体中数据太多,我这里提炼出来对我们分析结构有用的数据,如下:
struct objc_class : objc_object { |
class_data_bits_t
结构如下:
struct class_data_bits_t { |
class_rw_t
结构中,rw
一般表示readwrite(可读可写),t
一般表示table,结构信息如下:
struct class_rw_t { |
class_rw_ext_t
结构信息如下:
struct class_rw_ext_t { |
class_ro_t
结构中,ro
一般表示readonly(只读),t
一般表示table,结构信息如下:
struct class_ro_t { |
用一张图来表示Class结构:
从上面的结构分析我们可以看到:class对象或meta-class对象里面确实保存了方法列表、属性列表、协议列表、成员变量列表等信息。
写在最后
关于Class
结构信息我们就分析到这里了,如果有什么不对的地方望指教。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ayanokouji!
评论