我有一个包含儿童的容器,需要定期更换。这些孩子是精灵,他们有一个弱引用的活动听众,用于mouse_down事件。当我呼叫removechild对孩子时,来自容器的Numchildren减少到0,但它们仍然在闪存中可见。我甚至试图删除容器并重新创建新的容器,但它仍然不起作用。还试图添加一些虚拟简单的精灵,而不是任何事件侦听器,但它没有带来任何结果。我认为垃圾收集器不像我希望的话:)

这是我的创建精灵代码:

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;
.

有帮助吗?

解决方案

I don't think it has anything to do with Garbage Collector. Are you 100% sure that the itemHolder in second code is the same as the itemHolder in the first? Perhaps you could try adding trace("Yep, this code executes") to the second snippet and see if it executes for sure? That, or the problem lies somewhere else in your code I think.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top