【发布时间】:2011-02-16 13:05:20
【问题描述】:
我已经实现了一个 Observable 类,它存储了所有观察者的列表。该列表是否应该包含对观察者的弱引用以防止内存泄漏?
什么是常见的做法?
【问题讨论】:
标签: observer-pattern weak-references observable
我已经实现了一个 Observable 类,它存储了所有观察者的列表。该列表是否应该包含对观察者的弱引用以防止内存泄漏?
什么是常见的做法?
【问题讨论】:
标签: observer-pattern weak-references observable
不一定,这取决于上下文。一些观察者可能只想做一些简单的事情,比如日志记录等,并且更愿意通过 Observable 对象保持活动状态。最好的办法就是清楚地记录您的选择,以便观察者知道他们是否需要明确注销自己。
【讨论】:
题外话,如果您使用的是 Rx 而不仅仅是 .NET 4 中的 IObservable 接口,您应该将 Subscribe 调用映射到 Subject 的私有实例,因为它将处理线程安全和调用顺序为你。然后,您可以在主题实例上调用 On*。
在主题方面,订阅者通常管理自己的订阅。至少这意味着处理 Subscribe 返回值,但在 Rx 中订阅通常会被另一个操作符终止(例如 Take 或 TakeUntil)。
【讨论】: