執行時(runtime) 方法交換

2021-07-31 18:24:59 字數 2240 閱讀 1890

1> 建立乙個 person 類,並定義兩個方法 study 和 run,分別實現

#import "person.h"

@implementation

person

- (void)study

- (void)run

@end

2> 正常呼叫方法

int main(int argc, const

char * argv)

執行程式,結果如下:

3> 交換方法實現

int main(int argc, const char * argv) 

return

0;}

執行程式,結果如下:

由執行結果可知:study 方法和 run 方法的實現的確被交換了。

4. 交換系統自帶的方法

在實際開發中,交換方法最大的應用場景是`替換系統自帶的方法。

4.1 舉例分析

舉個例子:從ios6到ios7,蘋果的介面風格由 『擬物化』 轉變為 『扁平化』。

『怎麼快速適配?』

1> 設定是通過系統的 imagenamed 方法來實現的。

2> 如果要進行ios7之後版本的適配,首先需要平面設計師做出一套扁平化的,然後對系統版本(systemversion)進行判斷: 大於7.0就是用扁平化。

3> 如果專案中很多地方都有設定的**,就要在每一處都新增判斷系統版本的**,工作量十分龐大,很不現實。這個時候,就可以考慮使用執行時交換方法來解決問題。

『解決思路』

1> 假設舊的名為 『***.png』,可以讓平面設計師將新的名命名為』***_ios7.png』

2> 自定義乙個 『xfq_imagenamed』 方法,在該方法中進行系統版本判斷,如果大於7.0就使用』***_ios7.png』的。

3> 交換自定義的 『xfq_imagenamed』 方法 和 系統的 『imagenamed』 方法的實現

4.2 **實現

1> 自定義 uiimage+extension 分類

uiimage+extension.m

#import

"uiimage+extension.h"

#import

@implementation uiimage (extension)

/** 當某個類或者分類載入到記憶體的時候,會呼叫1次

*/+ (void)load

+ (uiimage *)xfq_imagenamed:(nsstring *)name

// 這裡需要特別注意: return的時候,使用的是自定義的方法,這個時候由於已經交換了方法,實際上呼叫的是系統的imagenamed方法'

return [uiimage xfq_imagenamed:name];

}// 注意: 在分類中重寫系統方法,不能滿足要求

// 這種方式會導致系統原來的方法無法使用

//+ (uiimage *)imagenamed:(nsstring *)name

// // 會死迴圈

// return [self imagenamed:name];

//}@end

2> 控制器中呼叫

#import

"viewcontroller.h"

@inte***ce viewcontroller ()

@property (weak, nonatomic) iboutlet uiimageview *imageview;

@end

@implementation viewcontroller

/** ios6 -> ios7

擬物化 -> 扁平化

*/- (void)viewdidload

@end

RunTime執行時之動態新增方法

import viewcontroller.h import person.h 複製 1 runtime 動態新增方法 oc都是懶載入機制,只要乙個方法實現了,就會馬上新增到方法列表中.qq,微博,直播等等應用,都有會員機制 performselector 去執行某個方法。performselect...

runtime 執行時機制

首先,第乙個問題,1 runtime實現的機制是什麼,怎麼用,一般用於幹嘛?這個問題我就不跟大家繞彎子了,直接告訴大家,runtime是一套比較底層的純c語言api,屬於1個c語言庫,包含了很多底層的c語言api。在我們平時編寫的oc 中,程式執行過程時,其實最終都是轉成了runtime的c語言 r...

runtime 執行時機制

必備常識 1.ivar 成員變數 2.method 成員方法相關應用 1.nscoding 歸檔和解檔,利用runtime遍歷模型物件的所有屬性 2.字典 模型 利用runtime遍歷模型物件的所有屬性,根據屬性名從字典中取出對應的值,設定到模型的屬性上 3.kvo 利用runtime動態產生乙個類...