Arrays 在AS3中,是否在函数末尾丢弃函数中定义的数组?
奇怪的问题: 采取以下措施:Arrays 在AS3中,是否在函数末尾丢弃函数中定义的数组?,arrays,flash,actionscript-3,Arrays,Flash,Actionscript 3,奇怪的问题: 采取以下措施: function something():Array { var ar:Array = []; var i:MovieClip; for each(i in list) ar[ar.length] = i.x; return ar; } ar是否会被丢弃,或者它是否会继续在我的内存中冷却,增加每次调用此函数时使用的内存 我的问题适用于以下每一种情况: var-val:Array=something()(显然val
function something():Array
{
var ar:Array = [];
var i:MovieClip;
for each(i in list)
ar[ar.length] = i.x;
return ar;
}
ar
是否会被丢弃,或者它是否会继续在我的内存中冷却,增加每次调用此函数时使用的内存
我的问题适用于以下每一种情况:
var-val:Array=something()
(显然val
存储在内存中,但是在函数中创建的原始数组呢?)something()代码>
return ar.slice();
据我所知,
var-ar:Array=[]
是函数something()
的本地函数,当函数退出时将被GC'ed。除非您在函数返回时按照您在案例1中的建议选择它:var-val:Array=something()代码>。调用something()代码>不应累积内存
编辑:
我在挖掘的过程中发现了这个;查看PowerPoint
如果只运行该函数一次,数组实际上将保留在内存中。但是,此后的任何分配都可能触发垃圾收集器运行,它最终应该删除ar
。这仍然表明变量ar
从长远来看不会挂起something()
并阻塞内存。垃圾收集由闪存引擎自动完成。然而,这不是瞬间完成的。在flash中,任何未被引用的内容都将被GC'ed
[有关详细信息,请参阅]
所以对于“something()”的函数情况
或
只要函数“something()”中的数组未被引用(每次pop时清除,或完全为null)。通过您可以访问的变量。该项目将免费提供给GC。因此会留下记忆
因此,函数的“Array.slice()”实际上是个坏主意,因为它会在GC之前将内存消耗翻一番(影响性能)
另一方面,如果让我们说你的函数有无用的变量,例如:你的循环计数器。如果在一天结束时没有引用,这些也会被GC'ed。对于flash,因此变量和垃圾收集“非常容易”。只要知道这个经验法则
如果通过任何可能的方式,您可以通过编程方式访问该变量,它将保持不变。如果你做不到,它将被摧毁
function something():void
可能应该是function something():Array
,很抱歉太挑剔了。:-)该死我应该养成在提交资料前先整理资料的习惯;P
for(var i:int = 0; i<100; i++) {
something();
}
var stupidArr:Array = [];
for(var i:int = 0; i<100; i++) {
stupidArr.push( something() );
}
stupidArr = null;
stupidArr.pop(); //Looped as desired