【问题标题】:Should I unbind event listener to prevent memory leaks?我应该取消绑定事件侦听器以防止内存泄漏吗?
【发布时间】:2013-02-07 19:29:53
【问题描述】:

这是我的代码:

// array of image data
var images = [
   {
      url: 'image.jpg'
   }
];

// function that loads image
var loadImage = function(imageObject) {
    imageObject.img = $('<img src="'+imageObject.url+'"/>').error(function() {
       // error event handler, that might not always fire
       imageObject.img.remove();
       imageObject.notLoaded = true;
    });
};

loadImage(images[0]);

我的问题是如何清理图像数组?如果我分配 images = null;,这会清理所有图像的内存吗?我应该取消绑定“错误”处理程序吗?

谢谢!

【问题讨论】:

  • 好吧,如果函数调用后我记录images[0].img - 它返回图像对象。
  • 哦对了,对不起,我没仔细看函数。

标签: javascript jquery memory memory-management memory-leaks


【解决方案1】:

与 C/C++(和其他)不同,JavaScript 负责内存管理和垃圾收集。当然,删除不必要的数据会释放您的浏览器/服务器使用的一些资源,可能会稍微提高整体性能,但这不是强制性的,如果您忘记它也不会发生内存泄漏。

要清理数组,可以设置images.length = 0images 将是一个空数组 []

【讨论】:

    【解决方案2】:

    我参加聚会可能为时已晚,但我自己偶然发现了这个问题。 @oleq 的回复是正确的,但前提是这是 Vanilla JS。

    jQuery 1.x 将所有事件保存在 jQuery.cache 对象中,因此您需要解除绑定,将其从那里移除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2013-01-11
      • 2014-08-13
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多