OC NSObject和isa

1、一个NSObject对象占多少个内存?

答:系统会分配16个字节给NSOobject对象(可通过malloc函数获得);但是NSObject内部只用了8个字节空间(64bit环境下)(可通过classgetinstancesize函数获得)。

2、对象的isa指针指向哪里?

答:OC中对象分三种:1、instance(实例对象),通过alloc创建;2、class(类对象),通过class方法获取;3、mate-class(元类对象),通过runtime API中的object_getclass()获取。

instance对象在内存中存储的信息有:isa指针、其他成员变量。
class对象在内存中存储的信息有:isa指针、superclass指针、属性、对象方法、协议信息、其他成员变量信息。
mate-class对象在内存中存储的信息有:isa指针、superclass指针、类方法。

OC NSObject和isa
instance的isa指向class
class的isa指向mate-class
mate-class的isa指向基类的mate-class
class的superclass指向父类的class,如果没有父类,superclass指针为nil
mate-class的superclass指向父类的mate-class
基类的mate-class的superclass指向基类的class

instance调用对象方法的轨迹,先isa找到class,方法不存在,就通过superclass找父类
class调用类方法的轨迹,先isa找到mate-class,方法不存在,就通过superclass找父类