应该在iOS中使用self删除通知吗?
[队友已在viewWillAppear
中注册了通知,并在viewDidDisappear
中将其删除,],>
override func viewWillAppear(_ animated: Bool) {
NotificationCenter.default.addObserver(self, selector: #selector(onDidReceiveData(_:)), name: .didReceiveData, object: API.shared)
}
override func viewDidDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self)
}
虽然我评论并建议使用显式名称
删除通知,而不是使用self
删除,因为我认为将来可能需要在viewWillLoad中注册一些其他通知,但不应受调用NotificationCenter.default.removeObserver(self)
的意外或开发人员错误的影响。我的建议是使用删除观察者,override func viewDidDisappear(_ animated: Bool) {
NotificationCenter.default.removeObserver(self, name:.didReceiveData, object: nil)
}
队友回答说,用NotificationCenter.default.removeObserver(self)
删除完全可以,因为我们暂时不注册其他通知。我正在寻求参考或指导以说服他,为什么重要的是使用名称而不是self
来显式删除通知。
Apple是否有有关删除通知观察者的最佳做法的准则?
应该在iOS中使用self删除通知吗?队友已在viewWillAppear中注册了一个通知,并在viewDidDisappear中将其删除,例如,覆盖了func viewWillAppear(_ animation:Bool){...
在iOS 9之后,无需删除观察者,因为iOS将从已分配的ViewController中移除观察者
事实是,将来删除viewWillDisappear
中的所有通知并不安全。出于明显的原因,这不是一个好习惯,但是没有记录。在iOS 9之后,无需调用removeObserver,因为iOS不会尝试通知已释放的对象。就您而言,即使视图控制器不可见但出现在导航堆栈中,您也想收听您应该在deinit
中执行>
class ViewController: UIViewController {
deinit {
NotificationCenter.default.removeObserver(self, name:.didReceiveData, object: nil)
}
}