一个Person对象、一个Student对象占用多少内存空间?

创建⼀个实例对象⾄少需要多少内存?
#import <objc/runtime.h>
class_getInstanceSize([NSObject class]);
创建⼀个实例对象实际分配多少内存
#import <malloc/malloc.h>
malloc_size((__bridge const void *)obj);
OC对象的分类
Instance对象(实例对象)
NSObject *instance. = [NSObject class];
Class对象(类对象)
Class objectClass = [NSObject class];
meta-class对象(元类对象)
//将类对象当做参数传⼊ 获得元类对象 runtime函数
Class objectMetaClass = object_getClass([NSObject class]);
注意 [xxx class]⽅法返回的是类对象 ⽆论调多少次
object_getClass内部实现
Class objc_getClass(const char * aClassName)
Class object_getClass(id obj)
-(Class)class;
+(Class)class;
返回就是类对象
isa、superclass 指针
实例对象的isa 指针指向哪里:
Class 对象的superclass指针:
当子类的instance 对象要调用父类的instance 方法时,会先通过isa 找到子类的 class,再通过superclass找到父类的class,最后找到instance 方法实现调用;
meta-class 对象的superclass 指针:
当子类的class要调用父类的class方法时,会先通过isa找到子类的meta-class,再通过superclass找到父类的meta-class,最后找到class方法的实现进行调用;
isa、superclass 总结
instance的isa指向Class
Class的isa指向 MetaClass
MetaClass 的isa指向基类的MetaClass
class的superclass指向父类的class
<1>如果没有父类,superclass指针为nil
meta-class的 superclass 指向父类的meta-class
<1>基类的meta-Class 的superclass 指向基类的 Class
Instance 调用对象方法过程
<1>isa 找到 class,方法不存在,就通过superclass找父类
Class 调用类方法过程
<1>isa找meta-class,方法不存在,就通过superclass找父类

dada
adad