0

IconItemRenderer を拡張する ItemRenderers を含むリストがあります...ページに移動するとリストを破棄し、ページを離れると削除します...

最初のプロファイラーには、1 つの List と 12 の ItemRenderes があります。しばらくすると、まだ 1 つのリストと、ページにアクセスした量 * 12 ItemRenderes (4 回の訪問、48 の ItemRenderers) があります。

ガベージコレクションを取得する方法はありますか? プロファイラーには、自分のコード (ObjectReferences) に関連するものは何も表示されません...

私にとって唯一のヒントは、IconItemRenderer にあります。

private function attachLoadingListenersToIconDisplay():void
{
    if (iconDisplay)
    {
        iconDisplay.addEventListener(IOErrorEvent.IO_ERROR, iconDisplay_loadErrorHandler, false, 0, true);
        iconDisplay.addEventListener(SecurityErrorEvent.SECURITY_ERROR, iconDisplay_loadErrorHandler, false, 0, true);
    }
}

リスナーは削除されていないようです...

リストを処分…?

if(myList)
        {
            myList.dataProvider = null;
            if(contains(myList))
            {
                myList.parent.removeChild(myList);
            }
        }
        myList= null;

誰でもアイデア

より詳しい情報:

私の ItemRenderer は IconItemRenderer を拡張します...

リストを保持する UIComponent があります。

override protected function createChildren():void
    {
        super.createChildren();

        ...

        myList= new List();
        myList.setStyle('contentBackgroundAlpha', 1);
        myList.setStyle('contentBackgroundColor', 0x333333);
        myList.setStyle("horizontalScrollPolicy", ScrollPolicy.OFF);
        myList.height = 6 * ROW_HEIGHT;
        myList.horizontalCenter = 0;
        myList.itemRenderer = new ClassFactory(MyItemRenderer);
        addChild(myList);

        if(myList.layout && myList.layout is VerticalLayout)
        {
            VerticalLayout(myList.layout).variableRowHeight = false;
            VerticalLayout(myList.layout).gap = 1;
        }

    }

そしてそれを処分します:

public function dispose():void
    {

        ...

        if(myList)
        {
            myList.dataProvider = null;
            if(contains(myList))
            {
                removeChild(myList);
            }
        }
        myList= null;
    }
4

0 に答える 0