iOS alloc 都干了啥?

2021-03-14  本文已影响0人  司徒新新

先说alloc的执行顺序吧,说完之后在说

总的来说: alloc的运行顺序:
alloc -> _objc_rootAlloc -> callAlloc -> objc_msgSend
但是在callAlloc里会走
_objc_rootAllocWithZone -> _class_createInstanceFromZone
_class_createInstanceFromZone会执行三个方法
cls->instanceSize (先计算出需要的内存大小)
instanceSize (向系统申请开辟内存,返回地址指针)
obj->initInstanceIsa (关联到相应的类)

alloc(为16字节内存对齐)

会对当前对象 生成一个 如果是空的(没有属性的为8字节大小  但是因为字节对齐 所以会生成一个 16字节的内存地址)
如果有属性,里面每一个属性会有8字节的大小
例子 :
如果里面有两个double属性就会为  8(对象本身的地址字节大小) + 8(属性大小) + 8 (属性大小) 共为24字节
但是因为字节对齐的原因 所以会给出一个 32字节的内存地址
       
 
内存读取方式   小端模式
        
读取对象的内存地址   用 x objc   (x 跟  po 类似)
对象赋值之后 可以用x打印 objc 很长  也可以使用 x/4gx  编排 打印16进制的地址 直接读内存   
然后使用po 读取内存地址 打印值

顺便说一下 init做了什么。。。
什么都没做!!! 只是一个工厂模式,提供给你,让你写构造方法的!

哦! 还有一个new() ,其实就是 alloc init都执行了。并不推荐使用!

睡觉!~~~

上一篇下一篇

猜你喜欢

热点阅读