gpt4 book ai didi

arrays - 函数中定义的数组是否在 AS3 中的函数末尾被丢弃?

转载 作者:行者123 更新时间:2023-12-04 06:20:51 27 4
gpt4 key购买 nike

好奇的问题:

拿这个功能:

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();

    最佳答案

    垃圾收集由闪存引擎自动完成。然而,这不是立即完成的。在 flash 中,任何未引用的内容都将被 GC 处理。

    [见http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html更多细节]

    因此,对于您的“something()”功能案例

    for(var i:int = 0; i<100; i++) {
    something();
    }

    在被 GC 清除之前,生成的 100 个左右的数组将“冷却”大约几毫秒(变化)。然而...
    var stupidArr:Array = [];
    for(var i:int = 0; i<100; i++) {
    stupidArr.push( something() );
    }

    只要变量 'stupidArr' 存在,你的 100 个左右的数组就会保持不变。但是,如果接下来发生这种情况。
    stupidArr = null;

    或者
    stupidArr.pop(); //Looped as desired

    只要您的函数“something()”中的数组不被引用(每次弹出时清除,或完全为空)。通过您可以访问的变量。该项目将免费用于 GC。因此会留下内存。

    因此,您的函数的“Array.slice()”实际上是一个坏主意,因为它会使 GC 之前的内存消耗加倍(影响性能)

    另一方面,如果让我们说您的函数有无用的变量,例如:您的循环计数器。如果它们在一天结束时没有被引用,它们也会被 GC 处理。对于闪存,因此变量和垃圾收集“非常容易”。只要知道这个经验法则。

    If by any means possible, you can programically access the variable, it will persist. If you cant, it will be destroyed.

    关于arrays - 函数中定义的数组是否在 AS3 中的函数末尾被丢弃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592947/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com