Показать сообщение отдельно
Старый 30.01.2012, 14:41
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Люди, откуда такая мантра: "не отписался от события - утекла память".
Подписка подразумевает, что мы создаем ссылку на слушатель внутри dispatcher-a. Если dispatcher и владелец слушателя - одно и то же лицо - память никуда не потечёт.

Самый простой эксперимент - создаем класс-наследник Sprite, внутри вешаем trace на ENTER_FRAME в конструкторе. Создаем этот класс и удаляем на него ссылки. Наблюдаем некоторое время приход трейсов. Запускаем GC - трейсы пропали.
В принципе, можно даже просто подписаться на спрайт и не создавать на него ссылок нигде - то же самое будет (он на нас ссылается, а мы на него - нет).

Но от ENTER_FRAME как раз надо отписываться - ибо нефиг процессор грузить пока до тебя GC добирается.

А вешаться на события на мягких ссылках не стоит по одной причине:
- все время, пока GС будет добираться до объекта - объект будет исправно обрабатывать события - грузить проц тобишь.


Последний раз редактировалось expl; 30.01.2012 в 14:47.