美文网首页
runtime-isa

runtime-isa

作者: Berning | 来源:发表于2021-09-05 18:28 被阅读0次
  • 在arm64架构之前,isa就是一普通指针,存储着class,meta-class对象的地址
  • 从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,使用位域存储更多信息
# if __arm64__
#   define ISA_MASK        0x0000000ffffffff8ULL
#   define ISA_MAGIC_MASK  0x000003f000000001ULL
#   define ISA_MAGIC_VALUE 0x000001a000000001ULL
#endif
union isa_t {
    isa_t() { }
    isa_t(uintptr_t value) : bits(value) { }

    Class cls;
    uintptr_t bits;

    struct {
      uintptr_t nonpointer        : 1;                                       
      uintptr_t has_assoc         : 1;                                       
      uintptr_t has_cxx_dtor      : 1;                                       
      uintptr_t shiftcls          : 33; /*MACH_VM_MAX_ADDRESS 0x1000000000*/ 
      uintptr_t magic             : 6;                                       
      uintptr_t weakly_referenced : 1;                                       
      uintptr_t deallocating      : 1;                                       
      uintptr_t has_sidetable_rc  : 1;                                       
      uintptr_t extra_rc          : 19
    };

};

  • nonpointer
    0 : 代表普通指针,存储着class,meta-class对象的内存地址
    1 : 代表优化过的指针,存储着更多信息

  • has_assoc
    是否设置过关联对象,没有释放更快

  • has_cxx_dtor
    是否有C++析构函数,没有释放更快

  • shiftcls
    存储着class,meta-class对象的内存地址

  • magic
    用于调试时分辨对象是否完成初始化

  • weakly_referenced
    是否有被弱指针指向过,没有释放更快

  • deallocating
    对象是否正在释放

  • extra_rc
    里面存储的值是引用计数减1

  • has_sidetable_rc
    引用计数是否过大无法存储在isa中,如果为1,那么引用计数存储在一个叫SideTable的类属性中

相关文章

  • runtime-isa

    在arm64架构之前,isa就是一普通指针,存储着class,meta-class对象的地址 从arm64架构开始...

  • iOS基础 Runtime-isa (1)Runtime-isa

    Runtime 基础 (1)isa详解OC是一门动态性比较强的编辑语言,OC的动态性是由Runtime API来支...

  • OC基础 Runtime-isa (2)

    Runtime-isa 设值 isa之设值:与运算 | Main.m 优化:位域再次优化 使用结构体 再次优化 u...

  • OC基础 Runtime-isa (3)

    前面我们知道在arm64位之后实例对象的isa指针&ISA_MASK之后是指向class类对象,class类对象的...

  • iOS底层原理分析之Runtime-isa指针

    按照惯例附上官方解释:Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同Obje...

  • 3-1 runtime-isa数据结构

    IMP:一个函数指针,保存了方法的地址 一张SEL和IMP的对应表 通过SEL可以找到IMP runtime ...

网友评论

      本文标题:runtime-isa

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