![]() |
Что происходит со слушателями и объектами после removeChild?
Что-то я совсем запутался...
Допустим такая ситуация: Есть объект obj1, и на нём висит слушатель: Код AS3:
Код AS3:
Код AS3:
получается что в каждом объекте правильно вешать на REMOVED_FROM_STAGE - удаление всех его детей? |
Не нужен объект? "Расчлените" его, убейте ссылки и отпишитесь от слушателей.
|
Да, я так и сделал, спс. Память стало жрать существенно меньше.
Разобрался пока задавал вопрос) |
Не надо удалять всех слушателей и детей, это тратит ваши трудо-ресурсы.
obj1.addEventListener("event", listener) складывает в (какой-то там) массив, находящийся ВНУТРИ obj1 ссылку на listener. Таким образом сам listener не будет удален из памяти, пока obj1 существует. Если удаляем obj1, то он удаляется полностью. Опасна только такая ситуация: addEventListener("event", obj1.someMethod) В данном случае в каком-либо классе существует ссылка на obj1, и он не удалится. Хотя можно сделать weak reference в данном случае, и проблем опять же не будет. |
|
Ох да, где-то видел совершенно серьёзное замечание(может даже у Скиннера), что запланированный под удаление островок может и не удалиться из памяти, если он имеет слишком много замкнутых ссылок. Поэтому советуют всё-таки по-максимуму разбивать и зачищать ссылки.
|
Спасибо всем. weakreference кажется полезной штукой. Нужно попробовать.
|
s8000_1 прав только в отношениях мыши.
Объект вне дисплай листа продолжает получать все события (например, ENTER_FRAME), что по сути ест ЦП, а ещё хуже это может как то изменять внешний мир (черт его знает). В итоге несуществующий объект "реально" существует. Отписывайтесь от всех событий, каких сможете (кроме MouseEvent, вне дисплай листа получить его нормальными путями невозможно) |
>Объект вне дисплай листа продолжает получать все события (например, ENTER_FRAME), что по сути ест ЦП
Речь шла о памяти. Объект с навешенным enter_frame все равно удалится. Другой вопрос, что функция вхолостую гоняться будет :) |
| Часовой пояс GMT +4, время: 18:38. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.