调用.removeObserver for NSNotificationCenter = Swift deinit()的正确位置?

时间:2014-07-31 21:47:13

标签: swift nsnotificationcenter viewdidunload

由于viewDidUnload不是一个选项,我已经阅读了很多关于正确调用.removeObserver for NSNotificationCenter的地方的建议。

我只是想知道Swift中的新deinit()是否是一个不错的选择?

-nick

2 个答案:

答案 0 :(得分:10)

这实际上取决于您订阅NSNotificationCenter通知的类的角色。如果您订阅:

<强>的UIView

然后,一旦视图对用户不可见,您就应该取消订阅。在用户看不到视图时节省CPU周期而不消耗资源。

<强>的UIViewController

此处它还取决于您将响应通知而执行的操作类型。如果只是一个UI调整,您应该在视图控制器从屏幕上消失后立即取消订阅。

您的应用服务层

这里可以在deinit()中使用.removeObserver。但是,即使在这里,我倾向于建议您更明确地订阅和取消订阅NSNotificationCenter通知,并将其置于服务的启动和停止方法中。

答案 1 :(得分:1)

如果您以前在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