在AS3里面,我们用的最多的容器就是Array和Vector了,作为一个容器,我们有一个最重要的一个功能就是需要清空。我们常用的方法就是:
这个方法看起来挺简单,简洁,对不?
但考虑你有一段循环,需要每次循环都要获得一个空的容器,而且上次的计算结果不需要保留。如果使用这个方法的话,循环N次,就会产生N个需要被垃圾回收的数组。我们知道,AVM进行垃圾回收是有性能代价的,反复的new和置空的代价更是,那么我们有没有一个新的方法来清空一个现有的容器而不需要丢掉它呢。我们会想到使用容器的splice方法,可以使用如下:
但是这个代码看起来有点不直观,而且敲的键盘量有点多。我们也有另外一个替代方法,就是:
但是这个方法效率比上面两种慢多了去了,完全不实用,那么有没有一种最好的方法呢?
答案是有的!!!
Ta da~~~~
神马?????length居然是可写的??
哈哈,震精了吧,看看array的API吧。
[quote]
指定数组中元素数量的非负整数。在向数组中添加新元素时,此属性会自动更新。当您给数组元素赋值(例如,my_array[index] = value)时,如果 index 是数字,而且 index+1 大于 length 属性,则 length 属性会更新为 index+1。
注意:如果您为 length 属性所赋的值小于现有长度,会将数组截断。
[/quote]
以上的方法翻译并转载自:http://jacksondunstan.com/articles/702
哈哈,这样就真相大白了吧!
array = [];
这个方法看起来挺简单,简洁,对不?
但考虑你有一段循环,需要每次循环都要获得一个空的容器,而且上次的计算结果不需要保留。如果使用这个方法的话,循环N次,就会产生N个需要被垃圾回收的数组。我们知道,AVM进行垃圾回收是有性能代价的,反复的new和置空的代价更是,那么我们有没有一个新的方法来清空一个现有的容器而不需要丢掉它呢。我们会想到使用容器的splice方法,可以使用如下:
array.splice(0,array.length);
但是这个代码看起来有点不直观,而且敲的键盘量有点多。我们也有另外一个替代方法,就是:
vector = vector.filter(
function(obj:Object, idx:int, vector:Vector.<Object>): Boolean{
return false;
}
);
但是这个方法效率比上面两种慢多了去了,完全不实用,那么有没有一种最好的方法呢?
答案是有的!!!
Ta da~~~~
array.length = 0;
神马?????length居然是可写的??
哈哈,震精了吧,看看array的API吧。
[quote]
指定数组中元素数量的非负整数。在向数组中添加新元素时,此属性会自动更新。当您给数组元素赋值(例如,my_array[index] = value)时,如果 index 是数字,而且 index+1 大于 length 属性,则 length 属性会更新为 index+1。
注意:如果您为 length 属性所赋的值小于现有长度,会将数组截断。
[/quote]
以上的方法翻译并转载自:http://jacksondunstan.com/articles/702
哈哈,这样就真相大白了吧!