As3 - 如何高效地清空一个数组?

20

我一直在寻找如何清空 ActionScript 3 中的数组。

一些方法建议使用:array = [];(会有内存泄漏吗?)

其他方法会说:array.splice(0);

如果您有其他的方法,请分享一下。哪个更有效率呢?

谢谢。


内存泄漏?垃圾回收! - n4pgamer
5个回答

29

array.length = 0array.splice()在整体性能方面效果最佳。

array.splice(0)的执行速度比array.splice(array.length - 1, 1)快。


1
我知道这是一个老话题,但将数组设置为 null 怎么样? - drpelz
5
实际上,array = null; 会清除数组本身而不仅仅是清空它。这基本上和你执行 array = []; 的效果相同,之前的数组引用将丢失并可能被垃圾回收(这可能不是想要的结果)。 - Biro456
1
为什么不用array = new Array() - Gaston Flores

6

对于包含100个元素的数组(以毫秒为单位进行基准测试,数值越小所需时间越短):

// best performance (benchmark: 1157)
array.length = 0;
// lower performance (benchmark: 1554)
array = [];
// even lower performance (benchmark: 3592)
array.splice(0);

2

array.pop()和array.splice(array.length - 1, 1)之间有一个关键区别,即pop将返回元素的值。这对于清空数组时的便捷一行代码非常有用,例如:

while(myArray.length > 0){
     view.removeChild(myArray.pop());
}

2
我想知道,为什么您要以那种方式清空数组?清除对该数组的所有引用将使其可供垃圾回收。如果array是对array的唯一引用,则array = []会这样做。如果它不是,则可能不应该清空它(?)。
另外,请注意,数组接受字符串作为键。splice和length仅对整数键进行操作,因此它们对字符串键没有影响。
顺便说一下:array.splice(array.length - 1, 1);等同于array.pop();

我确实想让它可供垃圾回收,但我想清空它。 - ALOToverflow
相信在AS3中,数组不接受字符串作为键。对象可以,但是数组不行。 - Austin Fitzpatrick
@Omnomlets:你错了。下次请尝试验证你的陈述。 - back2dos
你说得对。我想那是因为数组首先扩展了对象。谢谢!每天都会学到新东西。 - Austin Fitzpatrick

1
array.splice(0,array.length);

这对我来说一直运作得相当不错,但我还没有机会通过分析器运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接