如何修改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);
}
本文介绍了一种使用Category+Runtime方法替换NSNotificationCenteraddObserver方法的方案,通过重新实现方法避免重复添加观察者。
1万+

被折叠的 条评论
为什么被折叠?



