【问题标题】:Is using weak references in Observers a good idea?在观察者中使用弱引用是个好主意吗?
【发布时间】:2011-02-16 13:05:20
【问题描述】:

我已经实现了一个 Observable 类,它存储了所有观察者的列表。该列表是否应该包含对观察者的弱引用以防止内存泄漏?

什么是常见的做法?

【问题讨论】:

    标签: observer-pattern weak-references observable


    【解决方案1】:

    不一定,这取决于上下文。一些观察者可能只想做一些简单的事情,比如日志记录等,并且更愿意通过 Observable 对象保持活动状态。最好的办法就是清楚地记录您的选择,以便观察者知道他们是否需要明确注销自己。

    【讨论】:

    • Ok thx .. 在我的情况下,我对保持对象存活并不感兴趣,但如果我在知道所有引用都消失之前调用 removeObserver,我可以这样做。如果我忘记了它,那个对象将保持活动状态。什么是最好的设计?程序员是否需要跟踪这一点,或者正在使用弱引用。
    【解决方案2】:

    题外话,如果您使用的是 Rx 而不仅仅是 .NET 4 中的 IObservable 接口,您应该将 Subscribe 调用映射到 Subject 的私​​有实例,因为它将处理线程安全和调用顺序为你。然后,您可以在主题实例上调用 On*

    在主题方面,订阅者通常管理自己的订阅。至少这意味着处理 Subscribe 返回值,但在 Rx 中订阅通常会被另一个操作符终止(例如 TakeTakeUntil)。

    【讨论】:

      猜你喜欢
      • 2016-02-02
      • 2021-09-25
      • 2012-04-20
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多