美文网首页
iOS alloc 都干了啥?

iOS alloc 都干了啥?

作者: 司徒新新 | 来源:发表于2021-03-14 23:33 被阅读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都执行了。并不推荐使用!

    睡觉!~~~

    相关文章

      网友评论

          本文标题:iOS alloc 都干了啥?

          本文链接:https://www.haomeiwen.com/subject/loqhcltx.html