iOS 執行時使用 交換兩個方法

2022-06-17 17:42:06 字數 718 閱讀 3323

舉例 在建立了如下** 

nsstring *str=nil;

nsurl *url =[nsurl urlwithstring:str];

nslog(

@"%@

",url);

但是想使用自己的方法並對傳入的字串做為空判斷

舉例 自己寫了乙個方法 

+(instancetype)sjurlwithstr:(nsstring *)str 替代系統方法

[nsurl urlwithstring:]
但是如果專案現在已經進行到了後期 就會涉及到很多介面要匯入標頭檔案 並修改使用這個方法 很不方便

那麼可以自己新建乙個url的分類 在分類中使用執行時交換兩個系統的方法和自己的方法快速的實現方法交換

#import "

nsurl+extension.h

"#import

@implementation nsurl (extension)

+(void

)load

+(instancetype)sjurlwithstr:(nsstring *)str

//下面的 sjurlwithstr 其實是使用了 urlwithstring

nsurl *url =[nsurl sjurlwithstr:str];

return

url;

}@end

執行時(runtime) 方法交換

1 建立乙個 person 類,並定義兩個方法 study 和 run,分別實現 import person.h implementation person void study void run end 2 正常呼叫方法 int main int argc,const char argv 執行程式...

使用執行時函式實現方法交換

通過objc runtime.h函式庫,可以做一些比較有趣的修改,比如平常在使用 uiimage imagenamed 方法時,即便字串名稱填寫錯誤,程式編譯或執行時系統都不會提示出錯。此處給原方法新增乙個小改動,當image為nil時,使用nslog列印輸出臺的方式提醒 載入失敗 import u...

執行時交換系統方法

ios7 開啟了扁平化 如果版本更迭,更換要求會特別大,維護起來十分困難,這個時候我們就可以使用執行時攔截設定過程 只需要修改底層的 就可以省卻繁雜的維護過程 首先我們建立乙個分類 但是這種方法不可取,一旦重寫系統方法就會被替代,無法設定,所以需要我們修改執行時來解決問題 可以在load方法中執行 ...