1、获取内存大小方法
1、 得到一个对象所需大小 class_getInstanceclass
2、如何得到一个对象实际分配大小 malloc_size
3、sizeof() 获取某个类型的内存大小,是运算符(编译时即确定)
内存对齐:系统的内存对齐 同 结构体的内存对齐不同。
结构体内存对齐:必须是最大成员大小的倍数。
iOS系统内存对齐:内存分配都是16字节倍数。
2、OC对象分类
OC中对象分为三类:Instance实例对象、Class 类对象、 Meta_Class 元类对象。 也就是我们系统内存中存在这些对象。
3、OC对象获取方法
Instance实例对象:
Person *personInstance =[ [Person alloc] init];
Class 类对象:
Person personClass = [Person Class] ;
Person personClass = object_getClass(personInstance ); ;
Meta_Class 元类对象:
Person personMetaClass = object_getClass(personClass);
4、OC不同对象内部存放的什么?
Instance实例对象:”内存中可以多个实例对象。也就是一个类可以生成多个实例对象存在内存中。
Class 类对象 :一个类的类对象是唯一的,内存中只有一份,指针地址一样。
Meta_Class 元类对象:每个类在内存中有且只有一个元类对象。
instance实例对象 | class类对象 | meta_class 元类对象 |
---|---|---|
一个类可以生成多个实例对象存在内存中 | 一个类的类对象是唯一的,内存中只有一份 | 每个类在内存中有且只有一个元类对象 |
isa指针、成员变量的具体值 | isa指针、superClass指针、属性、对象方法(-方法)、协议、成员变量的描述信息(成员变量的名称、类型) | isa指针、superClass指针、类方法(+方法) |
Class 类对象 和 Meta_Class 元类对象内存结构一样。本质都是struct objc_class结构体
搜狗截图20200326174610.png
网友评论