【问题标题】:Remove Observer when using addObserverForName:usingBlock使用 addObserverForName:usingBlock 时移除观察者
【发布时间】:2012-01-17 07:50:04
【问题描述】:

我有以下代码在加载视图时添加了一个观察者。

- (void)viewDidLoad
{
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserverForName:@"com.app.livedata.jsonupdated"
                                                      object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
                                                          NSLog(@"JSONUPDATED");
                                                      }];
}

这很好。但是,当视图被卸载并且我确认调用了 dealloc 时,通知仍在触发。

好像没有关闭这个观察者的方法?

【问题讨论】:

    标签: ios nsnotifications


    【解决方案1】:

    似乎解决方案是在 View 中跟踪对象,然后您可以在 dealloc 方法中引用它。

     id observer = [[NSNotificationCenter defaultCenter] addObserverForName: /* ... */ ];
    

    然后删除如下:

    [[NSNotificationCenter defaultCenter] removeObserver:observer];
    observer = nil;
    

    【讨论】:

    • 如果在 2 个不同的类中有相同的观察者并且观察者永远不会被删除,则此选项不起作用:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多