【问题标题】:Does removing a DOM element with an event listener attached cause a memory leak in dart:html?删除附加了事件侦听器的 DOM 元素会导致 dart:html 中的内存泄漏吗?
【发布时间】:2014-05-01 21:10:59
【问题描述】:

假设我有很多元素,每个元素都有自己的监听器,如下所示:

DivElement _container = querySelector("#container");

void _createButtons(int count) {
  for (int i = 0; i < count; i++) {
    var button = new ButtonElement()
    ..text = "Button #$i";
    button.onClick.listen((_) => print("Clicked #$i."));
    _container.append(button);
  }
}

然后在某个时候我清除了 DOM,如下所示:

_container.clear();

我应该担心“孤立”事件侦听器吗?

这似乎在纯 JavaScript 中并不清楚(例如,参见 Does remove a DOM object (in Javascript) will cause Memory leak if it has event attached?)。查看 Chrome DevTools 时间线,似乎周围有听众,但我不确定这是否与我所问的有关。

当然,我可以保留StreamSubscription 并“确定”取消它,但如果不是绝对必要,我不想这样做。它使代码复杂。

【问题讨论】:

    标签: dart


    【解决方案1】:

    垃圾收集器会移除监听器(就像 JS 移除未使用的监听器一样)。如果不再需要订阅,您可以放心地删除它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-15
      • 2011-03-01
      • 2011-06-27
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多