Actionscript 从阶段和垃圾收集器as3销毁displayObject?

Actionscript 从阶段和垃圾收集器as3销毁displayObject?,actionscript,removechild,Actionscript,Removechild,我需要一些非常有趣的帮助。我试着将孩子从父母或舞台上移除,但不只是移除孩子,我想摧毁整个物体。下面是我想做的一个非常简单的例子 public function TestProject() { holder = new Sprite(); this.addChild(holder); object1 = new Sprite(); object1.name = "object1"; object1.graph

我需要一些非常有趣的帮助。我试着将孩子从父母或舞台上移除,但不只是移除孩子,我想摧毁整个物体。下面是我想做的一个非常简单的例子

public function TestProject()
    {
        holder = new Sprite();
        this.addChild(holder);

        object1 = new Sprite();
        object1.name = "object1";
        object1.graphics.beginFill(0x6daeff);
        object1.graphics.drawRect(0,0,100,100);
        holder.addChild(object1);

        stage.addEventListener(MouseEvent.CLICK,onClick);
    }

    protected function onClick(event:MouseEvent):void
    {
        var tmp:DisplayObject = holder.removeChild(object1);
        tmp = null;

       // holder.removeChild(object1) = null; this give me error. 
    }
//在此代码中,object1已从阶段中删除,但object1不为null。当我调试时

object1=flash.display.Sprite;等等

我想删除子项,同时将该子项设置为null。
任何想法…

要清理内存,必须销毁对对象的所有引用。在这种情况下:

protected function onClick(event:MouseEvent):void
{
   if (holder.contains(object1))
       holder.removeChild(object1);
   object1 = null;
}


注意:将
null
应用于局部变量
tmp
时,不会影响
object1
实例变量

谢谢你的回答,但关键是在这个例子中,我只写了一个对象。例如,我问我什么时候有100个对象。大概是这样的:

for(var i:int=0;i<holder.numOfChilder;i++)
{
    holder.getChildAt(i).addEventListener(Event.MouseEvent,onObjectClick)
}

function onObjectClick():void
{
   holder.removeChild(event.currentTarget as DisplayObject) = null;
}

for(var i:int=0;i要清除动态创建且没有引用变量的对象,只需删除该对象的所有事件列表,使其符合GC的条件:

function onObjectClick(event:MouseEvent):void
{
   var target:DisplayObject = (event.currentTarget as DisplayObject); 
   target.removeEventListener(MouseEvent.CLICK, onObjectClick);
   holder.removeChild(target); 
}
注意:不需要为局部变量设置
null
,因为它将自动终止,因为方法运行将完成

注2:您可以在添加侦听器时设置
usewakreference=true

允许您的听众被自动垃圾收集。

非常感谢。这是我需要知道的。问候您
function onObjectClick(event:MouseEvent):void
{
   var target:DisplayObject = (event.currentTarget as DisplayObject); 
   target.removeEventListener(MouseEvent.CLICK, onObjectClick);
   holder.removeChild(target); 
}