我需要取消StreamSubscriptions吗?

时间:2014-08-20 09:11:18

标签: events memory-leaks stream dart

据我所知,每次收听事件时,都会创建一个新的StreamSubscription对象

element.onMouseMove.listen

我的问题是:什么时候将StreamSubscription对象从内存中释放出来?它会留在那里,直到我称之为 cancel()方法吗?或者是否足以删除StreamSubscription正在侦听的元素/对象? 什么时候我必须担心内存泄漏?

1 个答案:

答案 0 :(得分:1)

当从DOM中删除元素并且没有'active'变量引用该元素时,垃圾收集器将释放元素的内存和StreamSubscription。
使用'active',我正在讨论一个由一个类保存的变量,该类不能被垃圾收集,因为类本身被引用。

如果元素长时间保存在DOM中,但听众来来去去,则应该在听众不再对事件感兴趣时订阅和取消订阅。

订阅:

StreamSubscription _moveSubscr = element.onMouseMove.listen(moveHandler);

取消订阅

if(_moveSubscr != null) _moveSubscr.cancel;