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...