如何修改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);
}