objc_classstruct objc_class {
struct objc_class *class_pointer; // 指向元類
struct objc_class *super_class; // 父類指針
const char *name; // 類名
long version; // 版本
unsigned long info; // 比特掩碼
long instance_size; // 實例大小(含父類 ivar)
struct objc_ivar_list *ivars; // 實例變量列表
struct objc_method_list *methods; // 方法列表
struct objc_cache *cache; // 方法緩存
struct objc_protocol_list *protocols; // 協議列表
};
objc_methodstruct objc_method {
SEL method_name; // 方法選擇器
const char *method_types; // 類型編碼
IMP method_imp; // 實現入口地址
};
objc_ivar、分類 objc_category、協議列表、緩存結構均採用鏈表或可變長度結構,支援動態添加(分類)、快速查找(緩存哈希表)。
id = struct objc_object *,首字段 isa 指向類(類對象則指向元類)。SEL = struct objc_selector *,包含 sel_id 與 sel_types。IMP = id (*)(id, SEL, ...) 函數指釖。objc_super 用於 super 調用,含 receiver 與 super_class。所有結構在編譯期生成,運行時由 Objective-C Runtime 解析、緩存、分發消息。理解這些結構有助於深入掌握 KVO、動態方法解析、Method Swizzling 等高級特性。