【发布时间】:2016-12-12 17:00:41
【问题描述】:
我有这个代码,取自这个答案:https://stackoverflow.com/a/29099066/406322
extension NSNotificationCenter {
func setObserver(observer: AnyObject, selector: Selector, name: String?, object: AnyObject?) {
NSNotificationCenter.defaultCenter().removeObserver(observer, name: name, object: object)
NSNotificationCenter.defaultCenter().addObserver(observer, selector: selector, name: name, object: object)
}
}
现在,在我的视图控制器中,我在 viewDidLoad() 中设置我的观察者:
override func viewDidLoad() {
super.viewDidLoad()
setObservers()
}
func setObservers() {
NSNotificationCenter.defaultCenter().setObserver(self, selector: #selector(BaseController.handleComment(_:)), name: "newComment", object: nil)
}
然而,即使使用这个扩展,观察者在被添加之前被移除,每次我退出视图控制器并返回它时,我都会收到多个通知(每次多一个)。
这怎么可能?
【问题讨论】:
-
你确定旧的视图控制器正在被释放吗?额外的通知很可能会发送到视图控制器的先前实例。
-
我该如何释放它们,对不起这里是 Swift 的初学者。
标签: swift swift2 nsnotificationcenter