参考资料
南峰子的runtime 一
【OC刨根问底】Runtime简单粗暴理解
对象的理解,元类(meta class) 和 isa
iOS机制中,对象包括:类对象和实例对象
- 实例对象
- 对于实例对象,
isa是在分配内存等初始化操作的时候创建的.分配内存的时候创建了一个结构体,objc_objcet,体内有一个isa指针,指向本对象所属的类(或者说类对象),同时生成的id指针指向自己。
- 对于实例对象,
- 类对象
- 所有的类本身也是一个对象,类对象所属的类,叫做元类
meta class,isa指向meta class - 类中所有的方法,包括实例化方法和类方法,都存放在
meta class中,meta class的isa最终指向根类的meta class -
NSObject的meta class指向本身
- 所有的类本身也是一个对象,类对象所属的类,叫做元类
- 这里需要注意的是:我们在一个类对象调用class方法是无法获取meta-class,它只是返回类而已。
-
参照下图,
示意图
示例说明
[[NSObject alloc] init]
-
NSObject是一个类对象,+ alloc是一个类方法,[NSObject alloc]isa先找到NSObject的meta class中有没有alloc方法. -
[[NSObject alloc]返回了一个实例化对象.isa就指向了这个对象所属的类,还是NSObject,去找有没有init方法。
