首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Objective-C 底層數據結構全景:類、方法、實例、協議與緩存

     編輯:關於C語言

類結構 objc_class

struct 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_method

struct 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 等高級特性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved