Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在AS3中,是否在函数末尾丢弃函数中定义的数组?_Arrays_Flash_Actionscript 3 - Fatal编程技术网

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