参考资料
南峰子的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
方法。