2011-01-12 64 views
1

的例子来说明这个问题可以在这里找到:MooTools的事件泄漏

link text

试验表明,装有已连接点击事件的元素变量基本MooTools的类。还有一个“清理”功能可以删除事件并使元素变量无效。

我的问题是,当我循环千次创建“LeakClass”实例并清理它时,它会导致大量内存泄漏,就像没有明天一样。我在IE8和Chrome上测试了这个。

另一方面,我注意到,如果我注释掉添加“click”事件的行,代码不会泄漏。

有人可以帮我构建类/事件的方式,它不会泄漏。

在此先感谢。

回答

1

你想达到什么目的?

this.element = null;不会将元素从DOM中解开或销毁它,它只是删除对它的引用。要做到这一点,你应该使用this.element.destroy();调用内部清理功能 - 首先应用子节点的一点点GC,然后执行.empty(),然后将其从DOM中移除并最终完全删除它。你的代码将会创建大量的元素,这些元素将不再被引用,但缺乏引用并不意味着缺乏存在。每个元素都会自己使用内存,事件或不是。

+0

我很欣赏快速反应。我在这里试图模拟的是......当我运行一个不断添加和删除具有事件元素的AJAX应用程序时,会发生什么情况?应用程序会在一段时间后泄漏吗?这就是为什么我要在循环中创建类实例,以查看元素的处置和事件是否不泄漏。正如我在上面的问题上所陈述的......当我删除点击事件行时,即使你没有调用“this._element.destroy()”,代码也不会泄漏。我的问题是......我如何让“LeakClass”不泄漏? – 2011-01-13 11:38:21