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);
}