Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   garbage collector (http://www.flasher.ru/forum/showthread.php?t=76866)

meiciuc 14.03.2006 12:54

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

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 не удаляет объект, на который указывает ссылка. Он просто удаляет саму ссылку (тем самым, освобождая некоторое количество памяти). А объект будет удален сборщиком мусора, если на него больше никто не указывает. Когда настанет время.
См. ссылку

meiciuc 14.03.2006 16:56

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

Homo Sapiens 14.03.2006 20:11

Ответ достаточно прост. Пока есть хотя бы один способ добраться до объекта - объект не будет удаляться сборщиком мусора.


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

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