我有一个装有孩子的容器,需要定期更换。这些孩子是精灵,他们有一个用于 MOUSE_DOWN 事件的弱引用事件侦听器。当我对孩子调用 removeChild 时,容器中的 numChildren 减少到 0,但它们在 flash 中仍然可见。我什至试图删除容器并重新创建一个新容器,但它仍然不起作用。还尝试添加一些虚拟的简单精灵,没有任何事件侦听器,但没有带来任何结果。我认为垃圾收集器没有按我的意愿工作:)
这是我创建精灵的代码:
itemHolder=new Sprite();
addChild(itemHolder);
itemHolder.y=itemHolderY;
var itemY:Number=0;
for(var i:Number=0;i<modelBarList.bars.length;i++){
var item:bar_list_item;
item=new bar_list_item();
item.name="item"+i;
/*
setting properties for item
*/
itemHolder.addChild(item);
item.y=itemY;
item.mouseChildren=false;
item.buttonMode=true;
itemY+=item.height;
item.addEventListener(MouseEvent.MOUSE_UP,barSelected,false,10,true);
}
和删除代码:
while(itemHolder.numChildren){
var item:Sprite=Sprite(itemHolder.getChildAt(0));
item.removeEventListener(MouseEvent.MOUSE_UP,barSelected,false);
itemHolder.removeChild(item);
item=null;
}
removeChild(itemHolder);
itemHolder=null;