可以在此处找到演示此问题的示例:
测试显示了一个基本的Mootools类,它包含一个附加了click事件的元素变量。还有一个“清理”功能来删除事件并使元素变量无效。
我的问题是,当我循环一千次以创建“LeakClass”实例并清理它时,它会导致重大的内存泄漏,就像没有明天一样。我在IE8和Chrome上测试了这个。
另一方面,我注意到的是,如果我注释掉添加“click”事件的行,代码就不会泄漏。
有人可以帮助我以不泄漏的方式构建类/事件。
提前致谢。
答案 0 :(得分:1)
this.element = null;
不会从DOM中分离元素或将其销毁,它只是删除对它的引用。为此,您应该使用调用内部清理函数的this.element.destroy();
- 首先应用一小部分子节点GC,然后执行.empty()
,然后将其从DOM中删除,最后将其全部删除。你的代码只会创建大量的元素,这些元素将不再被引用但缺乏引用并不意味着缺乏存在。每个元素都会自行消耗内存,事件与否。