【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!
评论











