Flex Mobile IconItemRenderer没有垃圾回收

时间:2013-04-24 15:38:03

标签: flex memory mobile memory-leaks itemrenderer

我有一个ItemRenderers的列表,扩展了IconItemRenderer ...当我来到一个页面时我处理该列表并在我离开时将其删除...

在开始时的探查器中我有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;
    }

0 个答案:

没有答案