很多iOS開發(fā)者都會(huì)遇到這么一個(gè)問題,當(dāng)你調(diào)用系統(tǒng)的一個(gè)方法你發(fā)現(xiàn)這個(gè)方法的代碼實(shí)現(xiàn)不滿足你的需求(比如導(dǎo)航欄的返回乃秀,popViewControllerAnimated币狠,我想在每次執(zhí)行這個(gè)操作的時(shí)候發(fā)出一個(gè)通知),一般的想法就是繼承當(dāng)前類篷帅,重寫這個(gè)方法荒辕,so如果你想你添加的方法在系統(tǒng)的實(shí)現(xiàn)之前呢,除了邏輯操作和繼承能不能直接修改系統(tǒng)的方法呢犹褒?
可以的...Objective-C對象模型及應(yīng)用
我寫了一個(gè)NSMutableArray的category,下面是其中方法的實(shí)現(xiàn),當(dāng)然你要先導(dǎo)入#import <objc/runtime.h>
doExchange用來把NSMutableArray方法removeAllObjects的實(shí)現(xiàn)替換為newRemoveMethod的實(shí)現(xiàn)抵窒。
Method是一個(gè)結(jié)構(gòu)體類型:
{SEL method_name, ? //方法名字
char *method_types, //傳入?yún)?shù),返回值
IMP method_imp} ? ? ?//方法實(shí)現(xiàn)的指針
調(diào)用:
NSMutableArray* tempArray = [@[@"1",@"2",@"3",@"4",@"5"]mutableCopy];
[tempArray doExchange];
[tempArray newRemoveMethod];
等一下叠骑,newRemoveMethod的實(shí)現(xiàn)為什么要[self newRemoveMethod]?
這樣不會(huì)循環(huán)引用馬上崩潰么李皇。
這里要區(qū)分開如今newRemoveMethod內(nèi)部實(shí)現(xiàn)已經(jīng)是系統(tǒng)的removeAllObjects。