bit 0nonpointer
1 bit
1 = 这是 nonpointer isa(塞了额外信息);0 = 纯裸指针(旧格式)
bit 1has_assoc
1 bit
对象是否有关联对象(objc_setAssociatedObject),释放时要清理
bit 2has_cxx_dtor
1 bit
类是否有 C++ 析构函数或 ObjC .cxx_destruct,决定释放路径
bit 3~35shiftcls
33 bits
Class 指针右移 3 位后存在这里(低 3 位对齐保证为 0,存其他信息)
bit 36~41magic
6 bits
固定值 0x3b,调试时用于校验 isa 是否合法,防止误读野指针
bit 42weakly_referenced
1 bit
对象是否被弱引用指向,释放时要去 weak table 置 nil
bit 43unused
1 bit
预留位,当前未使用
bit 44has_sidetable_rc
1 bit
引用计数是否溢出到 SideTable(extra_rc 装不下时置 1)
bit 45~63extra_rc
19 bits
内联引用计数,存的是「真实引用计数 - 1」,最大能存 524287