Actionscript 3 如何删除动作脚本3中的内容

Actionscript 3 如何删除动作脚本3中的内容,actionscript-3,memory-leaks,Actionscript 3,Memory Leaks,我试图从内存中删除简单对象,但当我调用removeChildren memory usage rose://时,我不知道为什么?如何移除对象 package { import flash.display.DisplayObject; import flash.display.SimpleButton; import flash.display.Sprite; import flash.events.Event; import flash.events.Ke

我试图从内存中删除简单对象,但当我调用removeChildren memory usage rose://时,我不知道为什么?如何移除对象

package {
    import flash.display.DisplayObject;
    import flash.display.SimpleButton;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.system.System;

    public class Main extends Sprite {

        public function Main() 
        {
            for (var i:int = 0 ; i < 1000;i++) {
                var addBouncerButton:SimpleButton = new SimpleButton();
                addBouncerButton.x = 100;
                addBouncerButton.y = 10;
                addBouncerButton.name = "Btn"+i;
                addChild(addBouncerButton);
            }
            stage.addEventListener(Event.ENTER_FRAME, update);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, remove);
        }

        private function remove(e:KeyboardEvent):void 
        {
            trace("Children : " + this.numChildren);
            trace(System.totalMemory * 1024 + " kb");
            if(this.numChildren > 0)
                var o:DisplayObject =  removeChildAt(this.numChildren - 1);
            o = null;
        }

        private function update(event:Event):void
        {
        }
    }
}
包{
导入flash.display.DisplayObject;
导入flash.display.SimpleButton;
导入flash.display.Sprite;
导入flash.events.Event;
导入flash.events.KeyboardEvent;
导入flash.system.system;
公共类Main扩展了Sprite{
公共功能Main()
{
对于(变量i:int=0;i<1000;i++){
var addBouncerButton:SimpleButton=newsimplebutton();
addBouncerButton.x=100;
addBouncerButton.y=10;
addBouncerButton.name=“Btn”+i;
addChild(addBouncerButton);
}
stage.addEventListener(Event.ENTER\u FRAME,update);
stage.addEventListener(KeyboardEvent.KEY_向下,移除);
}
私有函数移除(e:键盘事件):无效
{
trace(“Children:+this.numChildren”);
跟踪(System.totalMemory*1024+“kb”);
如果(this.numChildren>0)
变量o:DisplayObject=removeChildAt(this.numChildren-1);
o=零;
}
私有函数更新(事件:事件):无效
{
}
}
}

您可以使用delete关键字将对象排队进行垃圾收集。不过,这个垃圾收集器可能需要一段时间(几毫秒)来完成它的工作,并且不应该有对对象的后续引用

为了更好地理解as3 GC,您可以阅读这篇优秀的文章:


祝你好运

删除对对象的所有引用,例如,如果您有eventlisteners,请删除这些引用并将对象设置为null。垃圾收集器将在您不必担心的时候为您清理该对象。

当不再有对该对象的任何引用时,对象将被垃圾收集。然而,仅仅因为没有留下任何引用,并不意味着它将立即被垃圾收集;这只会在某个时候发生。恐怕你对“删除”的理解是错误的“删除”用于从对象和字典中删除动态创建的属性,例如条目(和键)。您应该确保删除对该对象的所有引用,as3gc将拾取它们。阅读本文以更好地理解as2/3删除差异