舉例 在創建了如下代碼
NSString *str=nil; NSURL *url =[NSURL URLWithString:str]; NSLog(@"%@",url);
但是想使用自己的方法並對傳入的字符串做為空判斷
舉例 自己寫了一個方法
+(instancetype)SJUrlWithStr:(NSString *)str 替代系統方法
[NSURL URLWithString:]
但是如果項目現在已經進行到了后期 就會涉及到很多界面要導入頭文件 並修改使用這個方法 很不方便
那么可以自己新建一個URL的分類 在分類中使用運行時交換兩個系統的方法和自己的方法快速的實現方法交換
#import "NSURL+Extension.h" #import <objc/message.h> @implementation NSURL (Extension) +(void)load{ //獲取系統方法結構體 Method system = class_getClassMethod([self class], @selector(URLWithString:)); //獲取自己方法結構體 Method own = class_getClassMethod([self class], @selector(SJUrlWithStr:)); // 交換方法 系統的 URLWithString 和自己的 SJUrlWithStr //交換自己方法和系統方法 method_exchangeImplementations(system, own); //以后再使用 URLWithString 的時候 其實是在調用SJUrlWithStr } +(instancetype)SJUrlWithStr:(NSString *)str{ if (str==nil) { NSLog(@"字符串為空"); return nil; } // 下面的 SJUrlWithStr 其實是使用了 URLWithString NSURL *url = [NSURL SJUrlWithStr:str]; return url; } @end