当我不使用它们时,动态声明的变量会发生什么?

时间:2014-04-23 20:07:14

标签: android performance actionscript-3 flash-cs6

我正在使用Flash Pro cc制作游戏。(ActionScript3)但是我想知道aTile会发生什么,它是通过循环动态声明的MovieClip变量。每个aTile都会得到2个EventListener。

for(var i:Number = 0; I< pVector.length; i ++){

var aTile:ATile=new ATile();

aTile.x=pVector[i].x;

aTile.y=pVector[i].y;

aTile.gotoAndStop(Math.ceil(Math.random()*Color));

nVector.push(aTile);



Spr.addChild(aTile);


aTile.addEventListener(MouseEvent.CLICK,Clicked,false,0,true);

aTile.addEventListener(Event.COMPLETE, stop,false,0,true);

}

//当前函数在此结束。 aTile现在会发生什么?它会被垃圾收集吗?顺便说一下,只要玩家开始我的游戏新级别,这段代码就会运行。而且我没有在其他函数中使用aTile变量。我只使用nVector变量。  并且在循环中声明动态变量是否意味着创建了多个动态变量?例如,如果我将这段代码循环5次以上,是否意味着创建了5个aTile变量?或者每次声明var aTile时:ATile = new ATile();再次,它是否用'new'aTile替换'旧'aTile,因此在循环后只存在1 aTile ????

1 个答案:

答案 0 :(得分:1)

ActionScript是JavaScript的衍生产品。在这两种语言中,所有变量声明都被提升到包含函数的顶部,并且可以在整个函数中访问,无论它们在哪个块范围内被声明。

当程序无法再访问对象的所有引用时,将回收内存。由于您要将aTile添加到nVector和Sprite,它只会在函数返回后回收,nVector超出范围,并且Spr超出范围并从舞台中删除。