請提供使用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內存的一部分,並且垃圾收集器不會清除該部分。在我的例子,除去參考,我應該while循環後onTimerComplete方法中添加這行代碼:
movieClip=null;
感謝您的答覆,我現在已經找到了所有未刪除的對象的原因,通過使用調試this.contains ()來查看某些對象是否仍然在場景中,事實證明,我只是忘記了在我的代碼的另一部分中添加removeChild()語句。然而,你的答案的第二部分是非常有用的知道 - 刪除參考..在我的代碼中,我一直保持着我實例化的所有對象的數組,這就是我如何引用它們。以下例子中的movieClip = null;刪除實例後,我將數組引用設置爲null。 – user1199434