Dart 删除对象后取消内部流订阅的模式?

Dart 删除对象后取消内部流订阅的模式?,dart,listener,resource-cleanup,Dart,Listener,Resource Cleanup,根据我对Dart的流的理解,在调用StreamSubscription.cancel()之前,任何侦听器都将作为参考。这意味着,在流也被销毁之前,我的侦听对象不会从内存中删除 是否有任何标准模式可以确保我在不再需要该对象时取消所有内部侦听器?这是Dart中的一个问题还是我误解了这个概念 我能想到的一个解决方案是destroy或cancelSubscriptions方法,一旦我知道不再需要对象,就必须手动调用该方法。如果订阅服务器和引用流的实例都要进行垃圾收集(没有被某个活动实例引用)连接不应该计

根据我对Dart的
流的理解,在调用
StreamSubscription.cancel()
之前,任何侦听器都将作为参考。这意味着,在流也被销毁之前,我的侦听对象不会从内存中删除

是否有任何标准模式可以确保我在不再需要该对象时取消所有内部侦听器?这是Dart中的一个问题还是我误解了这个概念


我能想到的一个解决方案是
destroy
cancelSubscriptions
方法,一旦我知道不再需要对象,就必须手动调用该方法。

如果订阅服务器和引用流的实例都要进行垃圾收集(没有被某个活动实例引用)连接不应该计数,两个实例都应该被垃圾收集(但我不确定这一点)

我还没有看到任何图案。
当我只想取消所有订阅时,我将它们存储在集合中并运行

subscriptions.forEach{
s、 取消();
}
订阅。清除();
当我想在不同的情况下取消重新订阅时,我会为每个这样的订阅创建一个变量

var-someSubscr=xxx.listen(…);
...
如果(someSubscr!=null)someSubscr.cancel();
someScubscr=null;
我只在聚合元素中使用此选项,我使用
分离的
取消订阅,使用
附加的
订阅。
当我在其他情况下需要时,我会将上述代码放入
dispose
方法中,并在我知道不再需要该实例时调用它

我认为为应该有
dispose
方法的类创建一个接口并实现它会很好

抽象类{
无效处置();
}
当您有某种类型的工厂为您创建实例时,如果您不确定该实例是否需要调用
dispose
,当您使用完该实例后,只需添加这一行就安全了

如果(x是一次性的)x.dispose();
有一个使VM调用析构函数或dispose方法的特性请求

但这项计划能否实施还不确定

还涉及:


如果还没有标准的方法,我很乐意用自己的方法来做。一个
一次性的
界面正是我想要的。再次感谢你,林泽同志!好了,Dart中没有弱事件,就像缺少的弱集和弱映射一样。所有这些特性肯定会被添加,问题是什么时候。