我应该在哪里删除观察者NSNotification
在斯威夫特,因为viewDidUnload
and dealloc()
不可用?
As of iOS 9(和 OS X 10.11),你不需要移除观察者你自己,如果你不使用基于块的观察者的话。系统会为您完成此操作,因为它会尽可能为观察者使用归零弱引用。
如果您使用基于块的观察者,请确保您弱弱地捕捉自我 using [weak self]
在闭包的捕获列表中,以及删除观察者 in deinit
方法。如果你不使用对 self 的弱引用,deinit
方法(并因此删除该观察者)永远不会被调用,因为通知中心将无限期地持有对其的强引用。
更多信息可以在以下位置找到:OS X v10.11 和 iOS 9 的 Foundation 发行说明.
如果观察者能够存储为归零弱引用,则底层存储会将观察者存储为归零弱引用,或者如果对象不能弱存储(即,它具有自定义保留/释放机制,这会阻止运行时)由于能够弱存储对象)它将将该对象存储为非弱归零引用。这意味着观察者不需要在其释放方法中取消注册。
通过 -[NSNotificationCenter addObserverForName: object:queue: usingBlock] 方法基于块的观察者在不再使用时仍然需要取消注册,因为系统仍然保留对这些观察者的强引用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)