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