0

定期的に他の人と交換する必要がある子供がいるコンテナがあります。これらの子はスプライトであり、MOUSE_DOWNイベントの弱い参照イベントリスナーが1つあります。子に対して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;
4

1 に答える 1

0

ガベージコレクターとは何の関係もないと思います。2番目のコードのitemHolderが最初のコードのitemHolderと同じであると100%確信していますか?おそらくtrace("Yep, this code executes")、2番目のスニペットに追加して、確実に実行されるかどうかを確認できますか?それ、または問題はあなたのコードのどこかにあると思います。

于 2011-02-17T13:31:45.307 に答える