将强引用转换为对自身的弱引用
Posted
技术标签:
【中文标题】将强引用转换为对自身的弱引用【英文标题】:Converting a strong reference to weak reference to self 【发布时间】:2016-12-16 17:09:45 【问题描述】:如何将其转换为对 self 的弱引用?
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyViewController.handleMessage(_:)), name: "NewMessage", object: nil)
NSNotificationCenter.defaultCenter().removeObserver(self, name: "NewMessage", object: nil)
另外,还有一个相关的问题——视图控制器何时真正被销毁?我假设当您在不同的视图中切换时,视图控制器仍然保持活力,对吧?即它们不会在 viewDidDisappear 上被销毁。
【问题讨论】:
从 ios 9 开始,通知中心持有对观察者的弱引用,例如***.com/questions/39663984/…。 好的,所以通知中心对 self 的引用永远不会成为视图控制器停留的原因,对吧? 正确。澄清一下,在 iOS 9 之前,它存储了对观察者的assign
引用,因此它也没有将观察者保留在内存中。这是一个assign
引用意味着您必须在dealloc
/deinit
中删除自己作为观察者的身份,否则当您的应用尝试在已释放的对象上调用选择器时会崩溃。
【参考方案1】:
这是 viewcontroller 中的函数,它实际上是从内存中脱离出来的,所以在这里你可以删除观察者
deinit
// you code
为了对 self 进行弱引用,您可以使用
weak var this = self
【讨论】:
以上是关于将强引用转换为对自身的弱引用的主要内容,如果未能解决你的问题,请参考以下文章