Возникла проблема, у меня в проекте есть компоненты, которые несут в себе очень много различных контролов со своими обработчиками событий. Приходится часто создавать и удалять экземпляры таких вот "увесистых компонент". Нужно освобождать корректно память, потому что очень быстро засоряется оперативка.
Я воспользовался поиском на форуме и нашёл ссылку
http://www.flasher.ru/forum/showthre...E0%EC%FF%F2%FC
Хотелось бы резюмировать, неужели для того, чтобы можно было удалять сложные объекты, нужно писать в два раза больше кода, только чтобы контролировать все обработчики событий и т.п. Неужели нельзя по-человечески удалить объект?
И самый главный вопрос, а что если у меня mxml-компонент, у которого изначально прописаны обработчики, которые нельзя удалить через removeEventListener в as-коде?
===
Добавление:
Странно как-то получается. Я приготовил маленький пример, так в нём память освобождается, не смотря на то, что обработчики событий не удаляются.

Код:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%"
paddingLeft="8" paddingRight="8" paddingBottom="8" paddingTop="8"
creationComplete="onCreationComplete();">
<mx:Script>
<![CDATA[
import mx.containers.TitleWindow;
import mx.managers.PopUpManager;
import mx.controls.Alert;
private var form: TitleWindow;
public function onCreationComplete(): void {
var timer: Timer = new Timer(100);
timer.addEventListener(TimerEvent.TIMER, onTimer);
timer.start();
}
public function onTimer(event: TimerEvent): void {
simpleLabel.text = flash.system.System.totalMemory.toString();
}
public function onShowForm(): void {
form = TitleWindow(PopUpManager.createPopUp(this, TitleWindow, false));
form.title = 'bla-bla';
var btn: Button = new Button()
btn.name = 'btn';
form.addChild(btn);
form.getChildByName('btn').addEventListener(MouseEvent.CLICK, btnClick);
PopUpManager.centerPopUp(form);
}
public function btnClick(event: MouseEvent): void {
Alert.show('Hello');
}
public function onCloseForm(): void {
PopUpManager.removePopUp(form);
form = null;
}
public function on100Times(): void {
status.text = 'process';
for (var i: int = 1; i<=100; i++) {
status.text += '.';
btnShowForm.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
btnCloseForm.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
}
status.text = 'sleep :)';
}
]]>
</mx:Script>
<mx:ApplicationControlBar width="100%" height="100%" horizontalAlign="center" dock="true">
<mx:VBox>
<mx:Label id="simpleLabel" width="100%" textAlign="center"/>
<mx:Label id="status" width="100%" text="sleep :)" textAlign="left"/>
</mx:VBox>
</mx:ApplicationControlBar>
<mx:Panel id="panelMain" width="100%" height="100%">
<mx:Button id="btnShowForm" label="show form" click="onShowForm();"/>
<mx:Button id="btnCloseForm" label="close form" click="onCloseForm();"/>
<mx:Button id="btn100Times" label="show form 100 times" click="on100Times();"/>
</mx:Panel>
</mx:Application>
Кто-то может пролить свет, почему в простом примере объекты удаляются сборщиком мусора?