使用addObserverForName时删除Observer:usingBlock

时间:2012-01-17 07:50:04

标签: ios nsnotifications

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

- (void)viewDidLoad
{
    [super viewDidLoad];

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

这很好。但是当卸载视图并确认调用dealloc时,Notification仍在触发。

似乎没有停用此观察者的方法?

1 个答案:

答案 0 :(得分:26)

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

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

然后删除如下:

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