【发布时间】:2021-05-16 00:20:06
【问题描述】:
从 ios 9 开始,没有必要从通知中心取消订阅,因为 ios 会自动处理此问题,但在 ios 9 之前,开发人员必须手动调用 NotificationCenter.default.removeObserver(self) 以避免内存泄漏和常见的地方是(它是在很多教程和 Stackoverflow 帖子中建议)deinit。所以,我的问题是 - 怎么可能使用 deinit 从通知中注销,因为 deinit 只在对象释放之前调用,所以它的引用计数应该是 0,但肯定不是 - 因为我们仍然订阅通知中心。实现这一点的唯一可能方法似乎是使用弱引用,基本上如果通知中心弱引用对象,上述情况是可能的,但在这种情况下,根本不需要取消订阅,因为对象可以很容易地被释放。有人可以澄清一下这是如何工作的。
【问题讨论】:
-
我的猜测是通知中心的引用不是由ARC管理的。
标签: ios swift nsnotificationcenter deinit