指针

作者: Abner_XuanYuan | 来源:发表于2023-05-28 20:33 被阅读0次

    1、isa 指针

    在 arm64 架构之前,isa 就是一个普通的指针,存储着 Class、Meta-Class 对象的内存地址。从 arm64 架构开始,对 isa 进行了优化,变成了一个共用体(union)结构,还使用位域来存储更多的信息。
    共用体:共用同一块内存。

    2、结构

    isa 指针结构
    参数解析:
    bits:用来存储 struct 里面所有参数的数据。此处的 struct 只是用来注释说明 bits 中存放的哪些内容,可以省略不写。struct 中的后面的参数(如::1),表示占用多少位。
    nonpointer:0 代表普通的指针,存储着 Class、Meta-Class 对象的内存地址;1 代表优化过,使用位域存储更多的信息。
    has_assoc:是否有设置过关联对象,如果没有,释放时会更快。
    has_cxx_dtor:是否有 C++ 的析构函数(.cxx_destruct),如果没有,释放时会更快。
    shiftcls:存储着 Class、Meta-Class 对象的内存地址信息。
    magic:用于在调试时分辨对象是否未完成初始化。
    weakly_referenced:是否有被弱引用指向过,如果没有,释放时会更快。
    deallocating:对象是否正在释放。
    extra_rc:里面存储的值是引用计数器减1。
    has_sidetable_rc:引用计数器是否过大无法存储在 isa 中。如果为1,那么引用计数会存储在一个叫 SideTable 的类的属性中。

    3、问与答

    1、对象的 isa 指针指向哪里?

    instance 对象的 isa 指针指向 class 对象;
    class 对象的 isa 指针指向 meta_class 对象;
    meta_class 对象的 isa 指针指向基类的 meta_class 对象。

    2、isa、 superclass 指针
    对象、类与元类关系图

    相关文章

      网友评论

          本文标题:指针

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