
30.01.2012, 14:41
|
|
блогер
Регистрация: Feb 2006
Сообщений: 1,474
|
Люди, откуда такая мантра: "не отписался от события - утекла память".
Подписка подразумевает, что мы создаем ссылку на слушатель внутри dispatcher-a. Если dispatcher и владелец слушателя - одно и то же лицо - память никуда не потечёт.
Самый простой эксперимент - создаем класс-наследник Sprite, внутри вешаем trace на ENTER_FRAME в конструкторе. Создаем этот класс и удаляем на него ссылки. Наблюдаем некоторое время приход трейсов. Запускаем GC - трейсы пропали.
В принципе, можно даже просто подписаться на спрайт и не создавать на него ссылок нигде - то же самое будет (он на нас ссылается, а мы на него - нет).
Но от ENTER_FRAME как раз надо отписываться - ибо нефиг процессор грузить пока до тебя GC добирается.
А вешаться на события на мягких ссылках не стоит по одной причине:
- все время, пока GС будет добираться до объекта - объект будет исправно обрабатывать события - грузить проц тобишь.
Последний раз редактировалось expl; 30.01.2012 в 14:47.
|