iOS項目之交換方法(runtime)

在項目中够委,經(jīng)常會遇到系統(tǒng)自帶的方法滿足不了自己的需求荐类,往往我們解決這種情況的時候,都是在分類中添加一個方法茁帽。然而很多時候玉罐,項目已經(jīng)開發(fā)很長時間了,如果一個一個的去替換系統(tǒng)的方法潘拨,太浪費寶貴的時間吊输,所以在這里介紹使用runtime來交換方法。

在這里寫了一個小案例:

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

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

#import "NSString+ExchangeMethod.h"
#import <objc/runtime.h>

@implementation NSString (ExchangeMethod)

+ (void)load
{
    // 獲取系統(tǒng)的對象方法
    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 = @"輸入的字符串為空哦aE贰!";
    }
    
    /*
     因為已經(jīng)交換了方法丽声,所以在這里調(diào)用 sjx_stringByAppendingString: 實際為 stringByAppendingString: 
     如果這里寫 stringByAppendingString: 會造成死循環(huán)
     */
    return [self sjx_stringByAppendingString:aString];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末礁蔗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雁社,更是在濱河造成了極大的恐慌浴井,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件霉撵,死亡現(xiàn)場離奇詭異磺浙,居然都是意外死亡,警方通過查閱死者的電腦和手機徒坡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門撕氧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喇完,你說我怎么就攤上這事伦泥。” “怎么了锦溪?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵不脯,是天一觀的道長。 經(jīng)常有香客問我刻诊,道長防楷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任则涯,我火速辦了婚禮复局,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粟判。我一直安慰自己肖揣,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布浮入。 她就那樣靜靜地躺著龙优,像睡著了一般。 火紅的嫁衣襯著肌膚如雪事秀。 梳的紋絲不亂的頭發(fā)上彤断,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音易迹,去河邊找鬼宰衙。 笑死,一個胖子當著我的面吹牛睹欲,可吹牛的內(nèi)容都是我干的供炼。 我是一名探鬼主播一屋,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼袋哼!你這毒婦竟也來了冀墨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涛贯,失蹤者是張志新(化名)和其女友劉穎诽嘉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弟翘,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡虫腋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稀余。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悦冀。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖睛琳,靈堂內(nèi)的尸體忽然破棺而出雏门,到底是詐尸還是另有隱情,我是刑警寧澤掸掏,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布茁影,位于F島的核電站,受9級特大地震影響丧凤,放射性物質(zhì)發(fā)生泄漏募闲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一愿待、第九天 我趴在偏房一處隱蔽的房頂上張望浩螺。 院中可真熱鬧,春花似錦仍侥、人聲如沸要出。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽患蹂。三九已至,卻和暖如春砸紊,著一層夾襖步出監(jiān)牢的瞬間传于,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工醉顽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沼溜,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓游添,卻偏偏與公主長得像系草,于是被迫代替她去往敵國和親通熄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉找都,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,709評論 0 9
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,139評論 30 470
  • 對于從事 iOS 開發(fā)人員來說唇辨,所有的人都會答出【runtime 是運行時】什么情況下用runtime?大部分人能...
    夢夜繁星閱讀 3,721評論 7 64
  • 最近一直在想著嘗試做一些新的事情,之前沒做過檐嚣,自己又很想做的事情。我就一直在想啰扛,如果要做一件事情嚎京,哪些是需要我自己...
    A一心向上閱讀 262評論 1 1
  • 今天我們集體去比斯特購物中心了,那兒的東西吊牌價是英鎊隐解,進去之后都對人民幣沒有概念了鞍帝,完全忘記了一英磅折合人民幣約...
    蔡春琴閱讀 345評論 0 0