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

2K WebStudio 10.03.2009 12:36

Удаление объектов из иерархии отображения
 
Представим себе такую последовательность действий:

1. Создаем объект (сохранив на него ссылку)
2. Отслеживаем наступления некоторого события (не связанного с помещением или удалением объекта в/из иерархии отображения)
3. Добавляем объект в иерархию отображения
4. Удаляем объект из иерархии отображения
5. Удаляем ссылку на объект, созданную на первом шаге

По сути flash удалит объект, когда ему это понадобится, если ссылок на объект не осталось.
Вопрос такой: понятно, что события, обозначенные в шаге 2 не наступят. Но удалится ли объект? Т.е. будет ли считаться, что мы стерли ВСЕ ссылки на объект?

И еще момент: представим, что в наш объект были размещены другие объекты (ссылки на которые не сохранились), за которыми так же следили (addEventListener). После проделанных шагов 4 и 5, будут ли под-объекты считаться пригодными для выбрасывания?

Надеюсь, достаточно четко объяснил суть вопроса.

Заранее спасибо!

dimarik 10.03.2009 13:25

Мне не совсем понятно, почему события в шаге 2 не наступят, но Вам виднее. Объект не удалится, потому что был шаг 1.

По моменту. addChild оставляет ссылку на ребенка у родителя в списке детей. Т. o. объекты не будут считаться пригодными для выбрасывания до тех пор, пока не произойдет removeChild.

2K WebStudio 10.03.2009 13:53

Цитата:

Сообщение от dimarik (Сообщение 804285)
Мне не совсем понятно, почему события в шаге 2 не наступят, но Вам виднее. Объект не удалится, потому что был шаг 1.

Почему не удалится, если мы удаляем ссылку на нее и делаем reremoveChild()?

Цитата:

Сообщение от dimarik (Сообщение 804285)
По моменту. addChild оставляет ссылку на ребенка у родителя в списке детей. Т. o. объекты не будут считаться пригодными для выбрасывания до тех пор, пока не произойдет removeChild.

Но ссылки на родителя ведь уже нет. Почему не удаляются дети?

iflamberg 10.03.2009 14:19

флеш не настолько умный. Все ссылки лучше занулять(включая удаляемых детей). И обязательно удалять всех слушателей.

2K WebStudio 10.03.2009 14:35

Цитата:

Сообщение от iflamberg (Сообщение 804309)
флеш не настолько умный. Все ссылки лучше занулять(включая удаляемых детей). И обязательно удалять всех слушателей.

мда.. неприятно..
как обойти всех детей - я знаю.
тогда вопрос: как зная объект, найти всех назначенных слушателей (т.е. пару тип и значение слушателя)?

etc 10.03.2009 15:04

Цитата:

Сообщение от 2K WebStudio (Сообщение 804317)
мда.. неприятно..
как обойти всех детей - я знаю.
тогда вопрос: как зная объект, найти всех назначенных слушателей (т.е. пару тип и значение слушателя)?

Ну вы же знаете, у кого и зачем подписались?

2K WebStudio 10.03.2009 15:11

Цитата:

Сообщение от __etc (Сообщение 804338)
Ну вы же знаете, у кого и зачем подписались?

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

спасибо.

и можно на "ты".

etc 10.03.2009 15:13

Цитата:

Сообщение от 2K WebStudio (Сообщение 804339)
в общем случае - нет.

Как это? Я вот знаю где и на что я подписываюсь у объекта и при его удалении всё отписываю.

2K WebStudio 10.03.2009 15:18

Цитата:

Сообщение от __etc (Сообщение 804340)
Как это? Я вот знаю где и на что я подписываюсь у объекта и при его удалении всё отписываю.

если рассматривать общий случай объекта, про который мы ничего не знаем.
ведь так можно рассматривать объект, чтобы удалить всех его детей, добавленных методом addChild() не отслеживая этого.

etc 10.03.2009 15:20

В правильно начатом проекте проблемы отписывания от событий в принципе не возникнет.


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

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