我目前正在学习 WPF,并且偶然发现了弱事件的概念,但我真的很难“得到它”。我已经阅读了无数关于 Stackoverflow 的文章并查看了代码示例,但它并没有深入人心。
这是我的困境:
- 我知道当一个对象订阅一个事件时,事件的源必须持有对订阅者的引用。
- 我也明白,如果订阅者超出范围或被显式销毁但事件源没有被销毁,那么订阅者将不会被垃圾收集,因为事件源仍然保留对订阅者的引用。
- 避免这种情况的常用方法是在对象被销毁之前显式取消订阅源的订阅。我知道如果程序员无法确定何时会发生这种情况,这可能是一个问题。
所以从上面我了解了事件的使用如何导致内存泄漏以及为什么需要弱引用模式,但阻止我理解的是弱事件模式实际上是如何实现这个目标的?它有什么不同?
当然,即使有一个管理事件的类,它仍然必须订阅和取消订阅处理程序到/从源,因此引用必须存在,这给使用事件的标准方式带来了同样的问题。
有人请向我解释我缺少或误解的基本概念,并帮助我“了解”弱事件模式。