2010-02-10 55 views
20

我一直在寻找清除数组在ActionScript 3As3 - 如何有效清除数组?

一些方法建议:(?内存泄漏)array = [];

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

如果您有任何其他的,请分享。 哪一个效率更高?

谢谢。

+0

内存泄漏清理出当像阵列这非常适合方便一个衬垫?垃圾收集! – n4pgamer 2013-10-03 19:11:18

回答

29

array.length = 0array.splice()似乎最适合整体表现。

array.splice(0);将执行速度比array.splice(array.length - 1, 1);

+1

我知道这是一个老话题,但如何将数组设置为null? – drpelz 2012-02-27 22:07:37

+5

实际上'array = null;'摆脱阵列本身,而不是仅仅清理它。它基本上与'array = [];'时发生的一样,前面的数组引用丢失了,可能会被垃圾收集(这可能不是想要的结果)。 – Biro456 2012-12-21 19:48:30

+1

为什么不'array = new Array()'? – 2013-07-19 15:43:59

2

我想知道,你为什么要清除这种方式的阵列?清除对该数组的所有引用将使其可用于垃圾收集。 array = []会这样做,如果array是唯一参考array。如果它不是那么你可能不应该emtpying它(?)

也请注意``数组接受字符串作为键。 splice和lenght都只能操作整数键,所以它们对String键没有任何影响。

BTW:array.splice(array.length - 1, 1);相当于array.pop();

+0

我确实希望能够将它清空垃圾回收。 – ALOToverflow 2010-02-10 18:28:15

+0

很确定AS3中的数组不接受字符串作为键。对象是,但不是数组。 – 2010-02-10 18:30:55

+0

@Omnomlets:你错了。下次尝试验证你的陈述。 – back2dos 2010-02-10 18:44:52

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

这一直工作得很好了我,但我还没有机会通过分析器运行它尚未

2

有一个关键array.pop()和array.splice(array.length - 1,1)之间的区别是那个pop将返回元素的值。

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

对于具有100个元素阵列(以毫秒为基准,所需要的更少的时间下)::

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