objective-c - 在 iOS 5 ARC 中移除一个 NSNotificationCenter 观察者

标签 objective-c ios cocoa-touch nsnotifications nsnotificationcenter

我有一个基于 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/

相关文章:

ios - 如何在 iOS 11 中将导航栏设置为透明

ios - 我怎样才能重绘 UIView 的形状并同时给它一个阴影?

objective-c - 单元测试、STAssertThrows 和 NSExceptions

ios - 该类与键 tableView 的键值编码不兼容

objective-c - 为什么 UIViewController 没有加载我的 XIB 文件中的 View ?

iphone - 具有额外 ivar 和方法的核心数据管理对象

iOS 谷歌原生广告不可点击

ios - 在 iOS 8.3 中获取 CellID、MCC、MNC、LAC、信号强度、质量和网络

ios - 一直跟踪 UIScrollView contentOffset

ios - 候选人有不匹配的类型 UITableView?