runtime知识点
isa
arm64 架构之前,isa 是一个普通的指针,存储 class、metal-class 对象的内存地址。
arm64 架构开始,对 isa 进行了优化,变成了 union
共用体结构,使用位域来存储更多信息。
1 | union isa_t { |
关于其中位域存储的信息的一些详解
nonpointer
- 0 代表普通的指针,存储着 class meta-class 对象的内存地址
- 1 代表优化过,使用位域存储更多信息
has_assoc
是否设置过关联对象,如果没有释放会更快has_cxx_dtor
是否有 C++ 的析构函数,如果没有释放会更快shiftcls
存储着 class meta-class 对象的内存地址信息magic
用于在调试时判断对象是否未完成初始化weakly_referenced
是否被弱引用指向过,如果没有释放会更快deallocating
对象是否正在释放has_sidetable_rc
- 引用计数器是否过大无法存储在 isa 中
- 如果为 1,引用计数器会存储在一个叫 SideTable 的类属性中
extra_rc
里面存储的值是引用计数器减 1