我已经阅读了很多关于为 NSNotificationCenter 调用 .removeObserver 的正确位置的建议,因为 viewDidUnload 不是一个选项。
我只是想知道 Swift 中的新 deinit() 是否是一个不错的选择?
-缺口
我已经阅读了很多关于为 NSNotificationCenter 调用 .removeObserver 的正确位置的建议,因为 viewDidUnload 不是一个选项。
我只是想知道 Swift 中的新 deinit() 是否是一个不错的选择?
-缺口
这实际上取决于您订阅 NSNotificationCenter 通知的类的角色。如果您订阅:
界面视图
然后,一旦视图对用户不可见,您就应该取消订阅。在用户看不到视图时节省 CPU 周期并且不消耗资源。
UIViewController
在这里,它还取决于您为响应通知而要执行的操作类型。如果只是 UI 调整,您应该在视图控制器从屏幕上消失后立即取消订阅。
你的应用服务层
这里可以有.removeObserver
内部 deinit()。但是即使在这里,我也倾向于建议您更明确地了解何时订阅和取消订阅NSNotificationCenter
通知,并将它们放在服务的启动和停止方法中。
如果你之前调用removeObserver
过viewDidUnload
/ dealloc
/ deinit
,那么从 iOS 9.0 和 macOS 10.11 开始,你就不需要再调用它了:
如果您的应用面向 iOS 9.0 及更高版本或 macOS 10.11 及更高版本,则无需在其 dealloc 方法中取消注册观察者。
来源:https ://developer.apple.com/documentation/foundation/notificationcenter/1413994-removeobserver