【发布时间】:2020-02-19 18:36:54
【问题描述】:
是否应该在 iOS 中使用 self 删除通知?
队友在viewWillAppear注册了一个通知,在viewDidDisappear删除了like,
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)
}
在审核时,我已评论并建议删除带有 explicit name 的通知,而不是使用 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 有没有关于移除通知观察者的最佳做法的指南?
【问题讨论】:
-
我看到了类似的东西,如果我们在选择器方法中使用弱引用,我们不需要删除通知观察者。我不确定。关注此线程以了解更新。
-
Apple 在文档中特别声明了以下内容:“删除观察者时,请尽可能详细地删除它。例如,如果您使用名称和对象来注册观察者,请使用 removeObserver( _:name:object:) 带有名称和对象。”
标签: ios swift design-patterns notifications nsnotificationcenter