有几个资源(博客,SO question,加上我已经看到它在任何地方使用)建议从 中删除观察者NotificationCenter
,deinit
例如UIViewController
:
deinit {
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillShow, object: nil)
NotificationCenter.default.removeObserver(self, name: NSNotification.Name.UIKeyboardWillHide, object: nil)
}
现在,虽然根据另一个博客条目,我不必关心从中删除观察者,NotificationCenter
因为它使用weak
引用,但我已经看到与其他引用使用相同的模式。
困扰我的问题。根据官方文档:
在释放类实例之前立即调用 deinitializer。您使用 deinit 关键字编写反初始化器,类似于使用 init 关键字编写初始化器的方式。反初始化器仅适用于类类型。
这是否意味着如果仍然有对该类的强引用,deinit
将不会被调用,从而使deinit
引用清理无用?如果仍然有对viewController
from 的强引用NotificationCenter
,那么viewController
'sdeinit
将永远不会被调用,对吧?因此,删除强大的参考deinit
永远不会真正起作用。
我在这里错过了什么吗?