当我们做 someArray = [] 时,Array 中的内容会被垃圾收集吗?
Will the contents inside the Array garbage collected when we do someArray = []
someArray 中有一些项目。
所以 someArray.splice(0) 和 someArray = [] 做同样的事情就是让 someArray 为空。
someArray.splice(0) 比 someArray = [].
花费的时间要多得多
通过someArray = [],someArray里面的内容会被垃圾回收吗?
如果没有其他变量持有指向某些数组元素的指针,它就会这样做。
例如,
var a:Array = [new Object(), new Object(), new Object()];
var b:Object = a[1];
a = [];
a[0]
和 a[2]
将被垃圾回收,a[1]
不会,因为变量 b 持有对它的引用。
array = [];
创建新的空的而不是清除,因此垃圾收集器让它保持活动状态,需要使用:
array.length = 0; // or array.splice(0);
因为您可能有对数组的引用,它们也需要更新
先检查:
var someArray:Array=[1,2,3];
var copyOfSomeArray:Array=someArray;
someArray=[];
trace (copyOfSomeArray); //gives 1,2,3
现在这个:
var someArray:Array=[1,2,3];
var copyOfSomeArray:Array=someArray;
someArray.length = 0;
trace (copyOfSomeArray); //gives nothing
最后不要忘记为垃圾收集器显式设置 null 数组。
someArray=null;
someArray 中有一些项目。 所以 someArray.splice(0) 和 someArray = [] 做同样的事情就是让 someArray 为空。
someArray.splice(0) 比 someArray = [].
花费的时间要多得多通过someArray = [],someArray里面的内容会被垃圾回收吗?
如果没有其他变量持有指向某些数组元素的指针,它就会这样做。 例如,
var a:Array = [new Object(), new Object(), new Object()];
var b:Object = a[1];
a = [];
a[0]
和 a[2]
将被垃圾回收,a[1]
不会,因为变量 b 持有对它的引用。
array = [];
创建新的空的而不是清除,因此垃圾收集器让它保持活动状态,需要使用:
array.length = 0; // or array.splice(0);
因为您可能有对数组的引用,它们也需要更新
先检查:
var someArray:Array=[1,2,3];
var copyOfSomeArray:Array=someArray;
someArray=[];
trace (copyOfSomeArray); //gives 1,2,3
现在这个:
var someArray:Array=[1,2,3];
var copyOfSomeArray:Array=someArray;
someArray.length = 0;
trace (copyOfSomeArray); //gives nothing
最后不要忘记为垃圾收集器显式设置 null 数组。
someArray=null;