【发布时间】:2015-03-18 06:43:41
【问题描述】:
someArray 中有一些项目。 所以 someArray.splice(0) 和 someArray = [] 做同样的事情就是让 someArray 为空。
someArray.splice(0) 比 someArray = [] 花费更多的时间。
通过someArray = [],someArray里面的内容会被垃圾回收吗?
【问题讨论】:
标签: actionscript-3 garbage-collection
someArray 中有一些项目。 所以 someArray.splice(0) 和 someArray = [] 做同样的事情就是让 someArray 为空。
someArray.splice(0) 比 someArray = [] 花费更多的时间。
通过someArray = [],someArray里面的内容会被垃圾回收吗?
【问题讨论】:
标签: actionscript-3 garbage-collection
如果没有其他变量持有指向某些数组元素的指针,它会。 例如,
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
最后别忘了为垃圾收集器显式地清空数组。
someArray=null;
【讨论】: