日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS项目之交换方法(runtime)

發布時間:2025/5/22 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS项目之交换方法(runtime) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在項目中,經常會遇到系統自帶的方法滿足不了自己的需求,往往我們解決這種情況的時候,都是在分類中添加一個方法。然而很多時候,項目已經開發很長時間了,如果一個一個的去替換系統的方法,太浪費寶貴的時間,所以在這里介紹使用runtime來交換方法。

  在這里寫了一個小案例:

  在項目中使用stringByAppendingString:方法,判斷拼接的字符串是否為nil,如果為nil,則改為@"",避免項目崩潰。

  在這里要替換的方法是NSString的系統方法,所以在這里創建一個NSString的分類。因為在這里需要使用到runtime,需要導入#import <objc/runtime.h>頭文件。在?+ (void)load?方法中交換方法即可。下面將代碼附上:

#import "NSString+ExchangeMethod.h" #import <objc/runtime.h>@implementation NSString (ExchangeMethod)+ (void)load {// 獲取系統的對象方法Method stringByAppendingStringMethod = class_getInstanceMethod(self, @selector(stringByAppendingString:));// 獲取自己定義的對象方法Method sjx_stringByAppendingStringMethod = class_getInstanceMethod(self, @selector(sjx_stringByAppendingString:));// 方法交換 method_exchangeImplementations(stringByAppendingStringMethod, sjx_stringByAppendingStringMethod); }- (NSString *)sjx_stringByAppendingString:(NSString *)aString {if (aString == nil || aString.length == 0) {aString = @"輸入的字符串為空哦!!";}/*因為已經交換了方法,所以在這里調用 sjx_stringByAppendingString: 實際為 stringByAppendingString: 如果這里寫 stringByAppendingString: 會造成死循環*/return [self sjx_stringByAppendingString:aString]; }@end

GitHub:https://github.com/sjxjjx/runtime_exchangeMethod

  

轉載于:https://www.cnblogs.com/sjxjjx/p/6543587.html

總結

以上是生活随笔為你收集整理的iOS项目之交换方法(runtime)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。