01.alloc与字节对齐
一、探索alloc
Ryukie *obj1 = [Ryukie alloc];
Ryukie *obj2 = [obj1 init];
Ryukie *obj3 = [obj1 init];
NSLog(@"Objc1:%p,他的指针:%p", obj1, &obj1);
NSLog(@"Objc2:%p,他的指针:%p", obj2, &obj2);
NSLog(@"Objc3:%p,他的指针:%p", obj3, &obj3);2021-06-06 19:56:22.045515+0800 OCObject[10944:3914848] Objc1:0x28220bc60,他的指针:0x16d421bf8
2021-06-06 19:56:22.045611+0800 OCObject[10944:3914848] Objc2:0x28220bc60,他的指针:0x16d421bf0
2021-06-06 19:56:22.045659+0800 OCObject[10944:3914848] Objc3:0x28220bc60,他的指针:0x16d421be8二、通过源码了解alloc实现
2.1 可运行调试的源码
2.2 调用流程探究
a. 实验代码
b. alloc
c. objc_alloc
d. callAlloc
e. _objc_rootAlloc
f. _objc_rootAllocWithZone
g. _class_createInstanceFromZone 创建实例
h. 非第一次alloc
i. 流程图

三、字节对齐
3.1 算法
3.2 先思考一个问题:

3.3 内存调试

3.4 isa 与 MASK
a.获取isa指针
b.获取MASk
c.复原出isa
3.5 查看真实的内存排列方式
a.一个内存对齐的场景

b.思考
Last updated