我有一个基于 iOS 5 ARC 的项目,我很难确定我应该在哪里删除我在 UIViewController
中注册的 NSNotificationCenter
观察的观察者. SO 上的类似帖子说这应该在 -dealloc
方法中完成。尽管在 ARC 项目中不需要此方法,但我已将其添加到以下代码中:
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
作为测试,我打开 UIViewController
(在 UINavigationController
中),执行一些触发通知的操作,然后通过点击返回将其从堆栈中弹出按钮。然后我重新打开 UIViewController
,并执行更多操作来触发通知,但请注意每个回调都被调用了两次 - 这表明之前的通知尚未取消注册。重复此过程只会导致每个回调被调用多次,因此它们似乎永远不会注销。
如有任何帮助,我们将不胜感激!
最佳答案
很明显您的 dealloc
方法没有被调用(removeObserver
调用也没有)。
为什么不在 viewDidUnload:
或 viewWillDisappear:
方法中删除 UIViewController 的观察者?
关于objective-c - 在 iOS 5 ARC 中移除一个 NSNotificationCenter 观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372841/