PDA

Просмотр полной версии : garbage collector


meiciuc
14.03.2006, 12:54
Здравствуйте.
Есть класс А. У него есть метод а(). Внутри метода создается объект класса Б, который самостоятельно рисует мувиклип (именно рисует, не наследует от мувиклипа) - допустим, диалоговое окно. При нажатии кнопки диалогового окна, клип окна ремувится. Теперь вопрос - что будет с объектом Б. Подметет ли его мусорщик плеера?

ir73
14.03.2006, 13:39
инстанс на Б в классе А никуда ведь не девается. Значит не подметет

meiciuc
14.03.2006, 15:12
что значит "инстанс" - инстанс нэйм мувиклипа? нет-нет, клип удаляется. Вопрос о существовании ссылки на объект класса Б. Объект класса Б был задан внутри функции а(). Т.е. по завершении работы функции, все переменные, объявленные внутри нее, должны бы прекратить свое существование.

ir73
14.03.2006, 15:28
инстанс - ссылка на класс.
Клип удалился, но класс то это ведь не клип, с чего б ему удаляться?

Dimchansky
14.03.2006, 15:40
Обрабатывай вместе с удалением клипа в рамках класса Б инструкцию delete this
Ссылка на объект существует пока существует сам объект. Насколько я подозреваю, при очередной инвентаризации сборщик, не найдя объекта, убъет и ссылку на него.

meiciuc
14.03.2006, 15:40
Объект класса Б был задан внутри функции а(). Т.е. по завершении работы функции, все переменные, объявленные внутри нее, должны бы прекратить свое существование.

Dimchansky
14.03.2006, 16:46
Объектные типы
Объекты во Флэш МХ и похожи, и непохожи на объекты в Java. Общим свойством является то, что все объекты во Флэш доступны только по ссылке. Таким образом, создавая объект любым способом, мы получаем доступ лишь к ссылке на него. Сам объект хранится отдельно и напрямую недоступен. Например, мы пишем

a = new Object();

Теперь в а хранится ссылка на этот объект. Если вы специалист в С++, но не знаете Java, то обратите внимание, что оператор new вернул не указатель (в Java нет указателей), а ссылку.
.
.
.
Кроме ссылок, в объектах Флэш не хранится ничего. Даже методы - и те являются ссылками на объекты-функции. Сами же объекты хранятся отдельно и иначе как через ссылки нам недоступны. А объекты, на которые никто не ссылается, удаляет сборщик мусора. Детали работы этого сборщика остаются тайной. И подстегнуть его работу вручную, как это делается в Java, во Флэше, к сожалению, нельзя.
.
.
.
Есть специальное ключевое слово, позволяющее сделать ссылку, ведущую в пустоту. Это слово null. Присваивают null какой-либо ссылке в том случае, когда не хотят ее удалять совсем, но при этом желают явно обозначить, что пока что ссылка никуда не ведет. Но можно и удалить ссылку с помощью ключевого слова delete. Запомните, что во Флэше delete не удаляет объект, на который указывает ссылка. Он просто удаляет саму ссылку (тем самым, освобождая некоторое количество памяти). А объект будет удален сборщиком мусора, если на него больше никто не указывает. Когда настанет время.

См. ссылку (http://www.intuit.ru/department/internet/flashmx/2/2.html)

meiciuc
14.03.2006, 16:56
тоесть, при следующем обходе мусорщика объект прекратит существование. Я в общем то так и думал, но мне не хватало подтврждения. Спасибо, Dimchansky. delete this я пытался отработать, но trace сразу после него все равно выдавал Object. Конечно, можно поэкспериментировать, но сейчас просто мало времени. В любом случае, всем спасибо.

Homo Sapiens
14.03.2006, 20:11
Ответ достаточно прост. Пока есть хотя бы один способ добраться до объекта - объект не будет удаляться сборщиком мусора.