Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Удаление динамически созданных объектов (http://www.flasher.ru/forum/showthread.php?t=102869)

sangle 24.10.2007 18:55

Удаление динамически созданных объектов
 
Возникла проблема, у меня в проекте есть компоненты, которые несут в себе очень много различных контролов со своими обработчиками событий. Приходится часто создавать и удалять экземпляры таких вот "увесистых компонент". Нужно освобождать корректно память, потому что очень быстро засоряется оперативка.
Я воспользовался поиском на форуме и нашёл ссылку 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>

Кто-то может пролить свет, почему в простом примере объекты удаляются сборщиком мусора?


Часовой пояс GMT +4, время: 07:12.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.