iOS開發中Runtime的實際應用

2021-07-22 23:38:19 字數 882 閱讀 5596

runtime是objective-c的乙個固有特性,及在編譯階段並不能確定真正呼叫的函式名,函式的呼叫在執行時才得到確認。所以我們可以看到,oc在編譯階段沒有報錯的情況下,會在執行過程中出現閃退和崩潰的錯誤,而c語言在編譯過程中就會報錯。

ios的錯誤處理 - 編譯未出報錯,執行卻閃退

動態呼叫特性(c語言-函式在編譯時就會決定呼叫哪個函式),執行時才確定需要呼叫的函式

sel

id class

通過runtime獲取類的相關屬性名字

- 獲取類的屬性列表:property_getname

- 獲取類的方法列表:class_copymethodlist

- 獲取成員變數列表:class_copyivarlist

- 獲取協議列表:class_copyprotocollist

@selector 屬於runtime中的動態新增方法

關聯物件:為系統的類新增屬性(非繼承)

//首先定義乙個全域性變數,用它的位址作為關聯物件的key

static

char associatedobjectkey;

//設定關聯物件

objc_setassociatedobject(target, &associatedobjectkey, @"新增的字串屬性", objc_association_retain_nonatomic); //獲取關聯物件

nsstring *string = objc_getassociatedobject(target, &associatedobjectkey);

nslog(@"associatedobject = %@", string);

method_exchangeimplementations

iOS開發中runtime的使用

事實證明 1.傳送訊息 implementation viewcontroller void viewdidload end implementation uiimage image 載入分類到記憶體的時候呼叫 void load 注意 不能在分類中重寫系統方法imagenamed,因為會把系統的功...

iOS開發 runtime機制

runtime簡稱執行時。就是系統在執行的時候的一些機制,其中最主要的是訊息機制。對於c語言,函式的呼叫在編譯的時候會決定呼叫哪個函式 c語言的函式呼叫請看這裡 編譯完成之後直接順序執行,無任何二義性。oc的函式呼叫成為訊息傳送。屬於動態呼叫過程。在編譯的時候並不能決定真正呼叫哪個函式 事實證明,在...

iOS開發 runtime的基本使用

runtime的基本使用 1,動態改變例項變數的值 2,交換方法 3,動態新增方法 4,使用runtime為分類新增屬性 1,動態改變例項變數的值 1,動態改變屬性值 void change value name 3,動態新增方法 3,使用runtime 動態新增方法 void add method...