当ViewModel
自动超出作用域并且没有对其他类的引用时,我是否应该始终处置可观察对象?
下面是一个小例子:
public class TestViewModel : ReactiveObject
{
public TestViewModel()
{
MyList = new ReactiveList<string>();
MyList.ChangeTrackingEnabled = true;
//Do I have to dispose/unsubscribe this?
MyList.ItemChanged.Subscribe(_ => ...);
//Or this?
this.WhenAnyValue(x => x.MyList).Subscribe(_ => ...);
}
ReactiveList<string> _myList;
public ReactiveList<string> MyList
{
get => _myList;
set => this.RaiseAndSetIfChanged(ref _myList, value);
}
}
据我了解,订阅是普通的.NET对象。没有超出ViewModel类的引用。所以当我的TestViewModel超出范围(即该对象不再使用并被另一个对象替换)时,GarbageCollector应该清理ViewModel内部的所有内容,因此我不需要手动调用返回的IDisposables上的Dispose。
我这样说是否正确? 编辑
ReactiveList也可以持有其他.NET对象。此示例与不可变字符串类型无关。
Subscription
都需要被处理? - senzIDisposable
都需要被处理。但是很难总是知道哪些必须被处理。我想说的是,你不能确定你没有留下一个持有资源的订阅。如果你执行任何并发涉及计时器的连接或查询,那么你就会持有它们。你不知道你的客户端如何使用你的可观察对象。最好的做法是始终进行处理。 - Enigmativity