美文网首页
关于[NSNotificationCenter defaultC

关于[NSNotificationCenter defaultC

作者: Gu_Liang | 来源:发表于2018-09-21 17:05 被阅读184次

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]

这样才是把通知移除了。

相关文章

网友评论

      本文标题:关于[NSNotificationCenter defaultC

      本文链接:https://www.haomeiwen.com/subject/cpcznftx.html