Objc 2.0 · objc4-680
~2016,Halfrost 博客版本
objc_class : objc_object
isa_t isa
Class superclass
cache_t cache
class_data_bits_t bits ↓
↓data()
class_rw_t
uint32_t flags
uint32_t version
const class_ro_t *ro ↓
method_array_t methods
property_array_t properties
protocol_array_t protocols
Class firstSubclass
Class nextSiblingClass
char *demangledName
↓裸指针直接指向
class_ro_t
uint32_t flags
uint32_t instanceStart
uint32_t instanceSize
const char *name
method_list_t *baseMethodList
protocol_list_t *baseProtocols
ivar_list_t *ivars
uint8_t *ivarLayout
property_list_t *baseProperties
Objc 2.0 · objc4-818+
WWDC 2020 重构,当前版本
objc_class : objc_object
isa_t isa
Class superclass
cache_t cache 重构
class_data_bits_t bits ↓
↓data()
class_rw_t 精简
uint32_t flags
uint16_t witness 新增
ro_or_rw_ext PointerUnion
Class firstSubclass
Class nextSiblingClass
version / demangledName / methods
properties / protocols → 移入 rwe
ro_or_rw_ext 按需分叉:
↙ 无动态修改
直接指 ro
↘ 懒分配
class_rw_ext_t
↓
class_ro_t
uint32_t flags
uint32_t instanceStart / Size
name atomic
baseMethods PointerUnion
baseProtocols PointerUnion
ivar_list_t *ivars
baseProperties PointerUnion
ivarLayout ∪ nonMetaclass union
↕ rwe.ro 反向持有 class_ro_t
class_rw_ext_t 新结构
method_array_t methods
property_array_t properties
protocol_array_t protocols
const class_ro_t *ro
uint32_t version
const char *demangledName