哪个是从NSNotificationCenter中删除self的更好方法?只需从特定通知名称中删除self或删除self即可?

时间:2015-07-14 06:21:06

标签: ios objective-c notifications dealloc

我只想知道:在 dealloc 方法中从NSNotificationCenter中删除self的更好方法是什么?或者是否有人在两种方式之间遇到过不同的行为?

只需按照以下代码删除自己:

[[NSNotificationCenter defaultCenter] removeObserver:self];

或从特定通知名称中删除self,如下所示:

[[NSNotificationCenter defaultCenter] removeObserver:self name:NotificationName object:someObj];

PS。我只是抓到一个奇怪的事情,当我从第一路上从通知中心移除自己但是被解除分配的对象仍然可以收到通知,并且这个调用当然是崩溃例外

2 个答案:

答案 0 :(得分:0)

[[NSNotificationCenter defaultCenter] removeObserver:self];

将删除观察者所在的所有注册self

UIViewController可能有自己的注册,不希望在viewWillDisappear中删除:使用addObserver:selector:name:object:注册公共API中的任何通知都不太可能,因为这会阻止您在UIViewController子类中注册它们,但它当然可以注册非公开通知未来的版本。

取消注册的一种安全方法是每次注册时发送一次removeObserver:name:object:

- (void)deregisterForNotifications {
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center removeObserver:self name:someNotification object:nil];
object:nil];
}

答案 1 :(得分:0)

在dealloc中,最好使用

[[NSNotificationCenter defaultCenter] removeObserver:self];

否则总是使用

[[NSNotificationCenter defaultCenter] removeObserver:self name:NotificationName object:someObj];

在Xcode中,将光标放在此方法上,然后在右侧面板上查看快速帮助。