objc对象底层探索初步

12,605 阅读1分钟

探索ios底层alloc的几种方式

创建第一个符号断点alloc追踪

3.png

4.png

5.png 通过alloc一系列符号断点 判断出目标实现存在于动态库libobjc里

libobjc源码方式进入NSObect查看

image.png

image.png

image.png

源码分析alloc流程

image.png

目标alloc breakpoint处打开汇编 Debug - Debug WorkFlow - Always Show Disassembly

image.png

image.png

7.png

8.png

结合汇编分析 跟源码流程不同的是 _alloc_rootAlloc之前执行的是objc_alloc, libobjc源码全局查找相关 fixupMessageRef,

Screen Shot 2022-04-16 at 5.43.42 PM.png alloc流程修正如下

image.png

字节对齐

对象内部结构8字节对齐,isa指针为8字节,基本数据类型最大为8字节
为了计算方便 节省内存,对象之间16字节对齐
字节对齐计算方式  
    8字节对齐(xx + 7) & ~7
    16字节对齐(xx + 15) & ~15