探索Objective-C对象创建流程

创建对象在底层的运行原理

当我们创建对象调用 ObjectClass *obj = [[ObjectClass alloc] init]; 首先来到 alloc 方法 在内部实现以下的一连串调用

objc_001.png
objc_002.png

callAlloc 方法是一个函数指针 所以_objc_rootAlloc 返回 callAlloc就是 callAlloc 的内部 实现 如下:

探索Objective-C对象创建流程_第1张图片
objc_003.png

一般情况下 class_createInstance 开辟对象内存空间, 如下:

探索Objective-C对象创建流程_第2张图片
objc_004.png
探索Objective-C对象创建流程_第3张图片
objc_005.png
探索Objective-C对象创建流程_第4张图片
objc_006.png

这里 为什么要先字节对齐? 字节对齐: 是为了适配 硬件识别处理数据.
不同的CPU 对数据处理有不同的方法 那么怎么 去识别数据呢.这就有了字节对齐
相当于 我们网络传输 的 http 协议. 如果我们不遵循这个协议 就拿不到对应的数据
OC 对象是16字节对齐的 一个对象 最少开辟的内存空间 16 个字节 (对象 isa 指针就已经8个字节)
参考文章:
字节对齐的意义

objc_007.png
探索Objective-C对象创建流程_第5张图片
objc_008.png

init 方法在 NSObject 底层事实上什么事情都没干 就是返回 alloc 开辟好内存的对象 的一个 抽象方法. 主要就是留给开发者 使用.

我的个人博客
Runtime源码下载

你可能感兴趣的:(探索Objective-C对象创建流程)