iOS底层探索之路 下

iOS底层第二天--内存分配

2020-03-26  本文已影响0人  三月木头

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
上一篇 下一篇

猜你喜欢

热点阅读