Runtime相關
-
objc_object
-
objc_class
-
cache_t
- 用於快速查詢方法執行函式
- 是可增量擴充套件的雜湊結構
- 是區域性性原理的最佳應用
-
class_data_bits_t
- class_data_bits_t主要是對class_rw_t的封裝
- class_rw_t代表類相關的讀寫資訊、對class_ro_t的封裝
- class_ro_t代表類相關的只讀資訊
-
-
isa 指標
-
例項物件,isa指向其類物件
-
類物件,isa指向其元類物件
-
-
method_t
-
Type Encodings
- const char* types;
- const char* types;
-
-
總體
2. 物件、類物件、元類物件
- 類物件儲存例項方法列表等資訊
- 元類物件儲存類方法列表等資訊
3. 訊息傳遞
-
super
void objc_msgSend(void /* id self, SEL op, ... */) // [self class] => objc_msgSend(self, @selector(class)) 複製程式碼
void objc_msgSendSuper(void /* struct objc_super *super, SEL op, ... */) struct objc_super { /// Specifies an instance of a class __unsafe_unretained id receiver; }; // [super class] => objc_msgSendSuper(super, @selector(class)) 複製程式碼
-
快取查詢
-
給定值是SEL,目標值是對應的bucket_t中的IMP
-
-
當前類中查詢
- 已排序好的列表,採用二分查詢演算法查詢方法對應執行函式
- 沒有排序的列表,採用一般遍歷查詢方法對應執行函式
-
父類逐級查詢
-
訊息轉發
4. Method-Swizzling

5. 動態方法新增
+ (BOOL)resolveInstanceMethod:(SEL)sel { if (sel == @selector(test)) { // 動態新增test方法的實現 class_addMethod(self, @selector(test), testImp, "v@:"); return YES; } else { // 返回父類的預設呼叫 return [super resolveInstanceMethod:sel]; } } 複製程式碼
6. 動態方法解析
-
@dynamic
- 動態執行時語言將函式決議推遲帶執行時
- 編譯時語言在編譯期進行函式決議