1.
[NSNotificationCenter defaultCenter] addObserver:self selector:<#(nonnull SEL)#> name:Name object:<#(nullable id)#>
如果是这种形式添加通知,如果不需要直接调用
[NSNotificationCenter defaultCenter] removeObserver:self
移除就可以了。至于移除的时机具体看项目的需求了:比如delloc、viewWillDisappear甚至接收到了通知就移除都可以没有什么问题。
2.block形式的通知
[[NSNotificationCenter defaultCenter] addObserverForName:Name object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
//这里面需要注意使用weakSelf 不然会引起循环引用
}]
这里通知移除就不一样了,如果当前界面一直需要存在则你不需要手动收到移除,当delloc时系统会自动回收。
但是如果你需要收到通知或者在其他特定条件移除这个通知时,并不是调用
[[NSNotificationCenter defaultCenter] removeObserver:self] 或者 [NSNotificationCenter defaultCenter] removeObserver:self name:Name object:nil]
如果你是调用的这个那么你会发现你通知并没有移除掉,本人就犯过这种错,因为接受者这是并不是self,所以需要定义
@property (nonatomic , assign) id observer;
_observer = [[NSNotificationCenter defaultCenter] addObserverForName:Name object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
//这里面需要注意使用weakSelf 不然会引起循环引用
}]
[[NSNotificationCenter defaultCenter] removeObserver:_observer]
这样才是把通知移除了。
网友评论