![]() |
fl.transitions.TweenEvent.MOTION_FINISH по совершению, нужно удалять listener?
Здрасьте, простите если вопрос глупый, только второй день тыркаюсь в АС3, пока не все понятно, не могу понять, нужно ли удалять слушатель, или он сам удаляется?
Спасибо за внимание. |
я удаляю.
|
С чего вы взяли, что слушатель сам удаляется?
|
по логике вещей, почему бы не удалиться самому той вещи которая уже выполнена. :) Да и в примерах в хелпе я как-то не увидел ничего такого.
|
После уничтожения объекта (не важно какого) все слушатели, таймеры, присоединенные к нему, остаются и работают. Так что только чистить самому.
|
Понял, спасибо.
|
Цитата:
Я ВЕРНО МЫСЛЮ ИЛИ ОШИБАЮСЬ? может есть ссылочка почитать об этом подробно? (вот тут читал и здесь . Но насчет слушателей здесь ничего вроде нет |
Мыслите верно. Надо ещё прочитать про weak references (слабые ссылки), что-то не нашел по ссылкам про них.
Ещё конкретней - параметры конструктора Dictionary и то, что имеет непосредственное отношение к теме - параметры addEventListener. Так вот - врачи рекомендуют (если вы не извращенец и не используете анонимные функции и даже в этом случае можно исхитриться) 5-й параметр всегда ставить в true. Тогда когда удалится ссылка на обьект, то лангольеры сожрут и его и его слушатели. |
мне нравиться такой подход -
удалять листенер как только программа перестает в нем нуждаться, если это происходит одновременно с удалением объекта, то одновременно сносить листенеры и сам объект. Но еще более прикольно выстроить таким образом проект чтобы сам объект не удалять никогда, а лишь дективировать его и если нужно модифицировать и запускать снова. |
спасибо за указание пути. погружаюсь в поиски инфы
|
Так-так-так. Всегда по старинке чистил все последовательно: удалить из отображения, убить слушателей, занулить ссылку. А тут, оказывается, можно и не убивать слушателей, ибо можно поставить пятый параметр в логическую единицу. Ага. Итого мы имеем экономию в строчках.
Хм, Николай Мукк'офф, помнится, писал, мол, слабые ссылки хороши, но не всегда. Мол, слушатели могут удалиться в ненужный момент, потому что ГЦ так пожелал. Я не прав? |
Я не агитирую за неудаление руками слушателей, я за то, чтоб использовать слабые ссылки в слушателях как страховку на случай, если забудут/будет неудобно руками удалять. Плюс пока GC не съест слушателя - он может вызываться и жрать проц(ну в случае мышиных евентов не будет, понятно).
Если в слушателе используется анонимная функция, единственная ссылка на которую - в слушателе, то GC её в "ненужный момент" съест. Это есть (и это описано в доке). В остальном - всё ок (или есть баг, что очень врядли). |
Ага. А то я испугался уже, что пропустил облегчение жизни кодера из виду. А тут простая подстраховка.
|
Не всегда работает стабильно слабая ссылка, слушатели слетают раньше времени часто в случае локальных переменных (даже на сцене когда они)
|
Пример бы, это тогда баг, а что-то не нарыл я про такое.
Не бывает локальных DisplayObject'ов, бывают локальные ссылки на них. И в случае добавления их на сцену добавляется нормальная ссылка. Получается какая-то "полуслабая" ссылка - обьект на сцене не мрёт, а слушатель - мрёт. |
Ага, нашел:
[IMG]http://s40.***********/i090/1006/0d/1410bda9d883t.jpg[/IMG] Это не в упрек, это просто информативная выдержка из книги. А двумя страницами ранее было сказано про опасность анонимных функций и слабые ссылки как помощники в их удалении. |
и охота вам доверять и без того не совсем "умному" GC с слабыми ссылками, он и так чистит как ему нравиться, а вы ему еще такие важные вещи хотите доверить.
Нет, с листенерами нада все четко - в нужном месте поставили, пропала необходимость, сообщили товарищу из уборочного бюро - "приберите тут как только у вас появиться свободная минутка" и все...иначе кучи багов не избежать, все это ИМХО на личном опыте. |
Цитата:
Все удаления "руками" слушателей нужны чтобы "сэмулировать" удаление, само удаление произойдет по воле GC. |
Цитата:
Цитата:
Но я согласен. Добавлено через 1 час 34 минуты Кстати, а вот нашел в пришпиленной теме в этом разделе: http://flasher.ru/forum/showpost.php...3&postcount=40 |
| Часовой пояс GMT +4, время: 05:55. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.