美文网首页
关于[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