如何修改NSNotificationCenter addObsever方法的實現,首先想到的是繼承一個子類自己實現方法.但是項目進行了很久,以前的沒有用這個子類,要兼容以前的肯定不能這樣寫,最後想到用cateory+runtime方法直接替換addObsever方法.就如這樣:
+(void)load {
[self switchMethod];
}
- (void)addAvoidDuplicationObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject {//避免重複添加通知
[self removeObserver:observer name:aName object:anObject];
[self addAvoidDuplicationObserver:observer selector:aSelector name:aName object:anObject];
}
+ (void)switchMethod
{
SEL addSel = @selector(addObserver:selector:name:object:);
SEL myAddSel = @selector(addAvoidDuplicationObserver:selector:name:object:);
Method systemRemoveMethod = class_getInstanceMethod([self class],addSel);
Method DasenRemoveMethod = class_getInstanceMethod([self class], myAddSel);
method_exchangeImplementations(systemRemoveMethod, DasenRemoveMethod);
}