![]() |
Отписывание от событий
Всем доброго дня!
Всё таки довольно таки странный вопрос, но мне хочется как бы всё по правильному. Вот обычный код для каждой программы: Код AS3:
Код AS3:
Код AS3:
|
Используйте мягкие ссылки, названия методов - с маленькой буквы.
Какая необходимость в использовании метода Start? |
TanaTiX
Цитата:
Цитата:
Цитата:
|
А в чем смысл флажка isAddedToStageListener? Отписываемся если он true, но если false то по коду OnAddedToStage и не придет...
|
Stitch512
Согласен! Упустил из виду. Тут значит проблем нет. Раз вызвалась, значит подписывались и всегда можно отписывать. Косяк мой. Тогда у меня 3 вопроса: 1. Что за мягкие ссылки? 2. Можно ли отписывать событие, если оно не было подписано (что вообще будет?) 3. delete используется для удаления полей в динамическом классе, а можно ли как-то удалить сам динамический класс из памяти (я конечно понимаю что он сам удалится со временем если на него нет ссылок, но а самом можно?)? |
Цитата:
Цитата:
|
Под мягкими ссылками видимо имеется ввиду параметр "useWeakReference" в методе:
addEventListener(Event.ADDED, listener, false, 0, true); GC вроде как не учитывает слабые ссылки и по своему усмотрению может удалить завалявшийся слушатель. Но здесь не подходящий случай имхо. |
>> 1. Что за мягкие ссылки?
Код AS3:
Код AS3:
Ну это не плюсы, тут виртуальная машина всё решает. Всё что мы можем сделать это занулить все ссылки на объект дабы повысить вероятность очистки. Вручную сборщик мусора запускать не рекомендуется. справка |
Цитата:
Цитата:
На остальное вроде ответили. Добавлено через 1 минуту Dukobpa3, по 2-му пункту согласен с in4core |
Люди, откуда такая мантра: "не отписался от события - утекла память".
Подписка подразумевает, что мы создаем ссылку на слушатель внутри dispatcher-a. Если dispatcher и владелец слушателя - одно и то же лицо - память никуда не потечёт. Самый простой эксперимент - создаем класс-наследник Sprite, внутри вешаем trace на ENTER_FRAME в конструкторе. Создаем этот класс и удаляем на него ссылки. Наблюдаем некоторое время приход трейсов. Запускаем GC - трейсы пропали. В принципе, можно даже просто подписаться на спрайт и не создавать на него ссылок нигде - то же самое будет (он на нас ссылается, а мы на него - нет). Но от ENTER_FRAME как раз надо отписываться - ибо нефиг процессор грузить пока до тебя GC добирается. А вешаться на события на мягких ссылках не стоит по одной причине: - все время, пока GС будет добираться до объекта - объект будет исправно обрабатывать события - грузить проц тобишь. |
| Часовой пояс GMT +4, время: 14:03. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.