![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте. Создаю я мувиклип с тремя кадрами: "_up", "_over" и "_down". Задаю ему buttonMode = true. Добавляю ее в спрайт-контейнер, вешаю на эту кнопку слушатель "клика". Кнопка свое отработала, удаляю слушатель "клика", удаляю ее родителя из списка отображения, и обнуляю его. Вопрос: удалится ли из памяти эта кнопка? По идее слушатель ее "клика" удален, родитель (вместе с кнопкой) со сцены удален, родитель обнулен, ссылок на кнопку больше нигде нет. Но меня настораживает, то что при задании buttonMode = true, при наведении указателя изменяется вид курсора (рука/стрелка). Это происходит автоматически, значит где-то (без моего ведома) сидят слушатели, реагирующие на Mouse.OVER/Mouse.OUT. Удалятся ли эти слушатели при обнулении родителя кнопки? Или при обнулении самой кнопки?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Какое отношение слушатель имеет к удалению кнопки?
Вы же не ссылку на кнопку сохраняете, а наоборот "в кнопке" сохраняете ссылку на метод-хендлер и его хозяина соответственно. Эта ссылка как-то помешает удалить из памяти кнопку?
__________________
Reality.getBounds(this); |
|
|||||
|
Wolsh, спасибо за наставление. В принципе, логично. Если внутри кнопки повесить слушатель на себя, и в ней же создать обработчик. То при удалении кнопки не будет кого слушать и не будет кому обрабатывать слушатель...
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Вы считаете, что когда я передаю кнопке коллбэк (хэндлер, листенер), то ссылка на кнопку приобретает бессмертие? Да нет же. Бессмертие приобретает ссылка "на меня", поскольку она сохраняется в списке слушателей кнопки, в самой кнопке. И пока жива кнопка и я не отписался от её событий, эта ссылка будет там жить. И если я решу удалить "себя", не отписавшись, у меня ничего не выйдет – поскольку существует активная ссылка "на меня". Но у меня нет никаких мистических ссылок на кнопку. Нет у меня никакого массива "кого я слушаю". Есть обычная переменная-ссылка, которой я пользовался, когда вешал слушателя на эту кнопку. Но если я ее обнулю – где у меня останется ссылка на кнопку? При удалении объекта надо отписать этот объект от тех событий, которые он слушает. Потому что у тех, кого он слушает, есть ссылка на него. Пока на него есть ссылки, GC его не заберет. А не наоборот.
__________________
Reality.getBounds(this); |
|
|||||
|
Wolsh, спасибо за развернутый ответ. Хочу уточнить, правильно ли я понял. Дальше речь пойдет в том плане, что лишь у "меня" есть ссылка на кнопку.
Если "я" обюнулю кнопку - слушатели ее удалятся, потому что список хендлеров(ссылка на "меня") удалится. Тогда кнопка уничтожится из памяти. Если же НЕ удалять кнопку, а обнулить лишь себя, то ни я ни кнопка не удалятся из памяти. Потому что в кнопке будет ссылка на экземпляр "меня" (на мои обработчики). Поэтому от слушателя нужно отписаться явно; список обработчиков в кнопке удалится. Значит в кнопке не останется на меня ссылок. Я обнуляю себя. Так как я единственный, кто когда-то знал про кнопку - то кнопка тоже умирает. Я правильно понял?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Да, если "я" единственный, кто про нее знает, то есть кнопка была добавлена в "мой" список отображения, и больше ни у кого ссылок на нее нет, она умрет при обнулении "меня". Вроде это естественно.
__________________
Reality.getBounds(this); |
|
|||||
|
alatar, тогда я уже ничего не понимаю
. Я так понимаю, есть два способа:1. Обнулить кнопку (ссылка кнопки на "меня" удалится), слушатели удалятся, кнопка удалится. Потом обнулить себя. Мы с кнопкой уничтожены. 2. Отписаться от слушателя кнопки (ссылка кнопки на "меня" удалится). Потом обнулить себя. В кнопке нет ссылок на "меня", а я - единственный владелец ссылки на кнопку. Мы с кнопкой уничтожены. Как во втором случае можно не отписываться? Использовать слабые ссылки?
__________________
Я мало чего умею, но зато хорошо умею учиться... |
![]() |
![]() |
Часовой пояс GMT +4, время: 05:24. |
|
|
« Предыдущая тема | Следующая тема » |
|
|