美文网首页
1.对象原理探究

1.对象原理探究

作者: JoyChenSeven | 来源:发表于2019-12-18 17:56 被阅读0次

    alloc 探索

    alloc  已经创建了对象 init

    alloc  实现 原理  源码实现

    介绍三种方式

    1、下断点: (xcode 11下亲测) control + in - objc_alloc

    2、下符号断点:libobjc.A.dylib` + [NSObject alloc]:

    3、汇编 libobjc.A.dylib`objc_alloc:   

    可以看出 p1 p2 p3 为同一个对象,但是 &p1 &p2 &p3 是三个不同的指针指向了同一个内存区域,所以是不同的。

    libobjc.A.dylib`objc_alloc:   

    通过汇编查看

    部分开源源码地址 https://opensource.apple.com/tarballs/

    objc4-750源码下查看, NSObject.mm 文件中,mm支持c++ 混编

    创建对象 申请内存空间 - 指针

    x0 寄存器是 第一个参数,返回的时候是返回值的存储地方

    通过xcode 11.0 调试,在依次打上如下断点的时候,发现一直在 系统内中alloc,所以我在LGPerson中重写的init 方法打了断点,再程序进入LGPerson 的init 方法后再将下面的断点打开,即可找到LGPerson 的alloc 真实断点。

    alloc  是否有创建对象的能力 , 流程返回的时候 x0 就会存储一个指针-申请的内存空间

    ro  中包含

    word_align 方法, 字节对齐

     x p 以十六进制打印p对象在内存中地址

    x/4xg p  指令,将p 的内存地址以8字节为一段形式读出来,共读取了4段

    x/4xw p  指令, 将p 的内存地址以4字节为一段形式读出来,共读取了4段

    alloc 做了很多事情,而init  只是返回了self ,这里可以为开发者重写 init 方法提供了便利,因为我们会在对象的初始化的时候做一些自己的事情。

    而new 方法就是 callAlloc + init  ,就是alloc + init

    alloc   ->  _objc_rootAlloc  ->  callAlloc   ->   class_createInstance  ->  _class_createInstanceFromZone  -> calloc   -> initInstanceIsa

    po  指令,指的是 expression -o

    相关文章

      网友评论

          本文标题:1.对象原理探究

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