Форум 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=208316)

Scritkey 27.06.2014 22:26

Удаление объектов
 
Здравствуйте, я вот только недавно начал изучать данный язык и сразу озадачился таким вопросом
Если удалить родительский объект все дочерьнии удалятся в месте с ним и освободят память?
у меня есть мувик в котором много разных объектов
Код AS3:

var mc:MovieClip = new MovieClip();
 
mc.addChild(new ImgClass());
mc.addChild(new ImgClass2());
...
 
stage.addChild(mc);

если удалить removeChild(mc) все что в нем тоже удалится?
И тут же если там внутри mc на каких то объектах весят слушатели событий что будет с ними?
----------
И еще например если я создал во Flash CS5 новый MovieClip в него натыкал картинок с библиотеки и других мувиков "не программно" задам ему класс "GameScreen" и программно добавил его на сцену после чего я его удалю со сцены removeChild или GameScreen = null все что было внутри тоже удалится из памяти?
Буду благодарен за любую подсказку

alexandrratush 27.06.2014 23:10

removeChild удаляет только из списка отображения.
К сожалению памятью управлять мы не можем, но мы можем удалить все ссылки на объект (GameScreen = null), удалить все слушатели. После этого GC сам удалит ненужный объект.

in4core 27.06.2014 23:11

Нет ничего никуда не удалится и будет висеть в памяти. Запустите метод removeChildren() , а так же снимите все прослушки с внутренних объектов

Scritkey 27.06.2014 23:42

in4core, а что если в мувике очень много разных объектов и в утри объектов еще объекты целая иерархия
это выходит нужно вручную прописывать для всех удаление и убирать слушатели?
В выше сказаном посте
Цитата:

(GameScreen = null), удалить все слушатели. После этого GC сам удалит ненужный объект
И тут не по теме но возможно вы подскажете
Я долго мучался чтобы создать прелоадер вообщем в сети нашел такой метатег как
Код AS3:

[Frame(factoryClass = "Preloader")]

дальше сам прелоадер взял с FlashDevelop'a там такие строки есть
Код AS1/AS2:

var mainClass:Class = getDefinitionByName("Main") as Class;
if (parent == stage) stage.addChild(new mainClass() as DisplayObject);
else addChild(new mainClass() as DisplayObject);

Вопрос в том что если так и писать код то все нормально работает прелоадер срабатывает ждет пака все подгрузит и добавляет mainClass:Class на сцену (ждет - я имею виду выводи процент загрузки)
Но если написать так
Код AS1/AS2:

var mainClass:Class = new Main();
stage.addChild(mainClass as DisplayObject);

В этом случае просто белый экран пока не загрузи всю графику, из за чего оно так делает всем тут секрет поидеи в обоих случаях оно просто создает класс


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

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