Remove Observer when using addObserverForName:usin

2019-04-18 16:09发布

问题:

I have the following code that adds an observer in the loading of the view.

- (void)viewDidLoad
{
    [super viewDidLoad];

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

And this fires fine. However when the view is unloaded and I confirm the dealloc is called the Notification is still firing.

There doesn't seem to be a method for deactivating this observer?

回答1:

Seems the solution is to track the object in the View and then you can reference it in the dealloc methods.

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

And then remove as following:

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