【问题标题】:Do I need to cancel StreamSubscriptions?我需要取消 StreamSubscriptions 吗?
【发布时间】:2014-08-20 09:11:18
【问题描述】:

我了解每次监听事件时,都会创建一个新的 StreamSubscription 对象

element.onMouseMove.listen

我的问题是:这个 StreamSubscription 对象什么时候从内存中释放出来?在我调用它的 cancel() 方法之前,它会一直存在吗?或者删除 StreamSubscription 正在监听的元素/对象是否足够? 我究竟什么时候需要担心内存泄漏?

【问题讨论】:

    标签: events memory-leaks stream dart


    【解决方案1】:

    当元素从 DOM 中移除并且没有“活动”变量引用该元素时,垃圾收集器将释放该元素的内存和 StreamSubscription。
    使用“活动”时,我指的是一个由类持有的变量,该变量不能被垃圾收集,因为该类本身已被引用。

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

    订阅:

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

    退订

    if(_moveSubscr != null) _moveSubscr.cancel;
    

    【讨论】:

    • 酷!我认为每个能够监听事件的对象都是一样的,而不仅仅是 DOM 元素,对吧?
    • 是的,订阅事件就是监听流。在 Dart 中,Stream 用于通知订阅者。
    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 2018-04-05
    • 2020-05-30
    • 2022-01-02
    • 2021-11-14
    • 1970-01-01
    • 2020-05-05
    • 2011-01-20
    相关资源
    最近更新 更多