请提供使用 removeChild() 方法的代码部分。
通常你应该这样使用 removeChild() :
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
var movieClip:MovieClip;
var timer:Timer=new Timer(5000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
makeMovieClips();
function makeMovieClips() {
for (var i:int; i<2000; i++) {
movieClip=new MovieClip();
movieClip.graphics.beginFill(Math.random()*0xFFFFFF);
movieClip.graphics.drawCircle(Math.random()*stage.stageWidth, Math.random()*stage.stageHeight, Math.random()*40);
movieClip.graphics.endFill();
addChild(movieClip);
}
trace (numChildren) // should output 2000;
timer.start();
}
function onTimerComplete(e:TimerEvent):void {
while (numChildren>0) {
movieClip=getChildAt(0) as MovieClip;
removeChild(movieClip);
// or we can use removeChildAt(0); instead of 2 lines above
}
trace (numChildren) // should output 0, because all objects are removed from display list;
}
另外请注意,如果在这些对象上留下任何引用,则从显示列表中删除对象不会将它们从内存中排除。在我的示例中,在所有 Movieclip 都从舞台上移除后,对一个 MovieClip 对象的引用仍然存在,因此它将占用 VM 内存的一部分,并且垃圾收集器不会清理该部分。在我的示例中,要删除引用,我应该在 onTimerComplete 方法的 while 循环之后添加这行代码:
movieClip=null;