Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как же удалить MovieClip из памяти? (http://www.flasher.ru/forum/showthread.php?t=153021)

джонатан 26.03.2011 21:35

Как же удалить MovieClip из памяти?
 
Вложений: 1
Здравствуйте! Извеняюсь если вопрос часто поднимался, но я не нашёл ничего что бы мне помогло. Вроде всё что нужно я делаю, но не помогает. Итак. Есть MovieClip, в нем какое-то количество кадров и в последнем, я пишу
Код AS3:

trace("!");

Далее:

Код AS3:

package  {
        import flash.display.MovieClip;
 
        public class Main extends MovieClip {
 
                private var mc:MovieClip;
 
                public function Main() {
                        mc = new Mc();
                        this.addChild( mc );
                        this.removeChild( mc );
                        mc = null;
                }
        }
 
}

И вижу что в аутпут, восклицаетльный знак не перестаёт приходить, следовательно, клип балтается в памяти. Ссылку я удали, листенеров никаких не вешаю, в чем же беда?

Благодарю за внимание.

samana 26.03.2011 21:52

Это догадки... Наверно из-за того, что мувик при создании начинает автоматически проигрываться, в нем запускается его внутренний Event.ENTER_FRAME, похоже надо его принудительно остановить, командой
Код AS3:

stop()


джонатан 26.03.2011 22:07

А как можно проверить, удалился он или нет из памяти?

КорДум 26.03.2011 22:11

Профайлер FD/FB + принудительный вызов GC.

джонатан 26.03.2011 22:19

Проблему разрешил!
Спасибо КорДум, System.gc() помог.

Код AS3:

this.removeChild( mc );
mc = null;
System.gc();


i.o. 26.03.2011 22:27

mc у вас просто какой-то нехороший :)

- Либо подписывайтесь в нем на события Event.ADDED_TO_STAGE / Event.REMOVED_TO_STAGE. Пусть сам мувик инициализируется по добавлению на стол и чистится (останавливается, тормозит таймеры, отписывается от всех событий, зануляет все внутренние ссылки, удаляет своих детей и т.п) при удалении со стола.
- Либо сделайте метод destroy() в этом классе, который делает все вышеперечисленное. Разница в том, что когда этот метод вызвать, решаете вы сами.

И кроме всего прочего, даже после этого, мувик сразу не удалится из памяти. Пройдет время и его подберет мусоровоз сборщик мусора.

КорДум 26.03.2011 22:36

i.o., да не, все нормально, останавливать анимацию тоже надо (:
Автор топика просто не дожидался прихода GC, а сейчас решил пробудить дракона из спячки путем System.gc, который еще и работает только в дебаг плеере, да.

i.o. 26.03.2011 22:39

Цитата:

Сообщение от КорДум (Сообщение 984056)
i.o., да не, все нормально, останавливать анимацию тоже надо (:

дык я же написал:
Цитата:

...(останавливается, торм...
как раз про анимацию имел ввиду, если что :)

джонатан 29.03.2011 03:47

Так а дракон самостоятельно пробуждается по какой логике? Просто, интервал какой-то зашит?

КорДум 29.03.2011 09:51

Планка переполнения, скорее. Вы чего так беспокоитесь? Ваш клип там занимает в памяти пару килобайт, когда придет его время - GC придет и все сделает сам, только, чтобы никаких ссылок не держало его в программе, а то будет ваш клип бродить призраком.


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

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