先抛出一个小问题,然后延伸引入接下来要说的
zuyuClass *z = [zuyuClass alloc];
zuyuClass *z1 = [z init];
zuyuClass *z2 = [z init];
NSLog(@"%p - %p - %p",z,z1,z2);
思考一下是控制台的输出是怎么样的
思考过后代码试一下
z,z1,z2三个对象的地址是完全一样的
alloc 做了些什么?init 做了些什么?
OK我们现在正是开始今天的内容
想知道 alloc 都干了些什么.最简单的方式就是看源码对吧.来,咱们瞄一眼源码去
1
继续往下
2
继续
3
好,到这里简单说一下,会走到红色选中的位置,为什么会走到这儿呢? 通过下符号断点,显示的汇编中看出来,这咱们就简单的一句带过,不详细说.
简单说明
咱们继续往下
class_createInstance
4
继续往下
5
好了 划重点了开始
重点1. size_t size = cls->instanceSize(extraBytes); 6518行
创建对象首先最重要的大家应该都知道啦 , 内存 , 对吧. 这个 size 就是获取该对象需要多大的空间,从而进行字节对齐
(字节对齐简单来说就是 ,比如改对象需要12个字节, 那么就返回16字节 .如果该对象需要23个字节,那么就返回24字节 . 为什么要对齐? 玩过逆向,汇编或者研究过底层的朋友就比较理解这个,在这咱们就不多说了)
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/suibianshuoshuo-alloc-he-init.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:5 月 28, 2019 at 12:01 上午