Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.10.2007, 18:55
sangle вне форума Посмотреть профиль Отправить личное сообщение для sangle Найти все сообщения от sangle
  № 1  
Ответить с цитированием
sangle

Регистрация: Sep 2007
Сообщений: 32
По умолчанию Удаление динамически созданных объектов

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


Последний раз редактировалось sangle; 26.10.2007 в 00:42.
Создать новую тему Ответ Часовой пояс GMT +4, время: 04:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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