创建对象在底层的运行原理
当我们创建对象调用 ObjectClass *obj = [[ObjectClass alloc] init];
首先来到 alloc
方法 在内部实现以下的一连串调用
callAlloc
方法是一个函数指针 所以_objc_rootAlloc
返回 callAlloc
就是 callAlloc
的内部 实现 如下:
一般情况下 class_createInstance
开辟对象内存空间, 如下:
这里 为什么要先字节对齐? 字节对齐: 是为了适配 硬件识别处理数据.
不同的CPU 对数据处理有不同的方法 那么怎么 去识别数据呢.这就有了字节对齐
相当于 我们网络传输 的 http 协议. 如果我们不遵循这个协议 就拿不到对应的数据
OC 对象是16字节对齐的 一个对象 最少开辟的内存空间 16 个字节 (对象 isa 指针就已经8个字节)
参考文章:
字节对齐的意义
init
方法在 NSObject
底层事实上什么事情都没干 就是返回 alloc
开辟好内存的对象 的一个 抽象方法. 主要就是留给开发者 使用.
网友评论