我需要一些非常有趣的帮助。我尝试从父母那里移除孩子或者从舞台上移除,但不仅仅是removeChild而且我想要销毁整个物体。这是一个非常简单的例子,我想做什么。
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。 任何想法......
答案 0 :(得分:0)
要清理内存,必须销毁对象的所有引用。在这种情况下:
protected function onClick(event:MouseEvent):void
{
if (holder.contains(object1))
holder.removeChild(object1);
object1 = null;
}
或
protected function onClick(event:MouseEvent):void
{
if (object1.parent)
object1.parent.removeChild(object1);
object1 = null;
}
注意:当您将null
应用于本地变量tmp
时,您并没有影响object1
实例变量。
答案 1 :(得分:0)
感谢您的回答,但关键在于此示例中我只编写了一个对象。我问我什么时候有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;
}
子对象是动态创建的,我希望动态删除
答案 2 :(得分:0)
要清理动态创建且没有引用变量的对象,只需删除所有事件列表,使其符合GC条件:
function onObjectClick(event:MouseEvent):void
{
var target:DisplayObject = (event.currentTarget as DisplayObject);
target.removeEventListener(MouseEvent.CLICK, onObjectClick);
holder.removeChild(target);
}
注意:无需将null
设置为本地变量,因为方法运行将自动完成
注意2:你可以在添加你的监听器时设置useWeakReference=true
允许你的监听器自动被垃圾收集。