底层探索的三种方式
1.符号断点
按住control键,点击step info,进入断点,得到objc_alloc,添加符号断点
2.汇编跟流程
进入断点,选择Debug -> Debug Workflow -> Always Show Disassembly
编译器优化
3.根据已知符号断点,确定未知
至少知道是alloc函数,添加符号断点alloc,查看。
根据源码-绘制alloc流程图
总结
1.cls->instanceSize:先计算出需要的内存空间大小,对象内存大小由成员变量决定。
2.calloc:向系统申请开辟内存,返回地址指针
3.obj->initInstanceIsa:关联到相应的类
4.字节对齐为(x + WORD_MASK) & ~WORD_MASK; WORD_MASK为7。内存对齐为(x + size_t(15)) & ~size_t(15)。