在上一篇的demo中,增加几个类方法:
1 | // ObjectA.h |
用代码输出方法信息:
1 | // 定义 ISA_MASK 用于获取isa指针 |
不难发现,刚刚新增的两个类方法并没有被输出。
原因是因为类方法和实例方法并不是存放在一起;在OC的设计中,有类的类
的说法,即我们日常开发中的元类
。而我们定义的类方法,就存储在元类
中。
回顾一下类的定义:
1 | struct objc_class : objc_object { |
之前我们把重心放在了bits
上,现在我们回过头分析一下它的整个结构,就会发现,它也有一个isa指针(继承自objc_object
)。元类就存储在类对象的isa
中。元类
也是objc_class
类型。
元类
也是objc_class
结构体,那我们一样可以用上面的代码去解析它的方法列表(元类中只存储类方法):
1 | ObjectA *aObj = [[ObjectA alloc] init]; |