Вопрос

У меня есть контейнер с детьми, которые необходимо периодически заменить другим.Эти дети - это спрайты, и у них есть одно слабые ссылочные слушатели событий для события Mouse_Down.Когда я звоню Removechild на детей, NumCildren из контейнера уменьшается до 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