这是不正确的,至少在当前版本的Flash中。
我创建了一个函数,它创建一个大的字符串,创建一个引用它的闭包,然后用闭包调用setTimeout
。
public function tick():void {
var data:String = "helloworld";
for (var j = 0; j < 20; j++) {
data += data;
}
var f = function() {
var i = 0;
if (data.length > 0) {
i++;
}
};
setTimeout(f, 0);
}
我非常频繁运行了此功能,并使用System.totalMemory
(以及Mac OS X的活动监视器)来监视闪存的内存使用情况。
function Main():void {
setInterval(tick, 10);
setInterval(display, 500);
}
public function display():void {
trace("Memory usage: " + System.totalMemory + "B.");
}
内存使用量会短暂上升,但随后因为垃圾收集跳下去会回落下来,平均内存使用稳定用几分钟的时间。
当我修改代码以保持对每个闭包的明确引用时,内存使用量在几分钟内上升到很多千兆字节。文档已过时。 Flash不保留对传递给setTimeout
的封闭的引用。 (至少在OS X;我假定这将是在Windows相同)
我打电话setTimeout
之前创建数组作为一个静态类var和push
ED每个f
到其上。