Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.02.2012, 21:27
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 1  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
По умолчанию Создаются ли "скрытые" слушатели при MovieClip.buttonMode = true

Здравствуйте. Создаю я мувиклип с тремя кадрами: "_up", "_over" и "_down". Задаю ему buttonMode = true. Добавляю ее в спрайт-контейнер, вешаю на эту кнопку слушатель "клика". Кнопка свое отработала, удаляю слушатель "клика", удаляю ее родителя из списка отображения, и обнуляю его. Вопрос: удалится ли из памяти эта кнопка? По идее слушатель ее "клика" удален, родитель (вместе с кнопкой) со сцены удален, родитель обнулен, ссылок на кнопку больше нигде нет. Но меня настораживает, то что при задании buttonMode = true, при наведении указателя изменяется вид курсора (рука/стрелка). Это происходит автоматически, значит где-то (без моего ведома) сидят слушатели, реагирующие на Mouse.OVER/Mouse.OUT. Удалятся ли эти слушатели при обнулении родителя кнопки? Или при обнулении самой кнопки?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 27.02.2012, 21:29
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 2  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Да, иначе об этом бы было сообщено в справке, в любом случае вы доступ к ним не имеете
__________________
Марк Tween

Старый 27.02.2012, 21:30
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 3  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Спасибо, мне логика тоже это подсказывает, просто хотел убедится...
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 27.02.2012, 21:42
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Какое отношение слушатель имеет к удалению кнопки?
Вы же не ссылку на кнопку сохраняете, а наоборот "в кнопке" сохраняете ссылку на метод-хендлер и его хозяина соответственно. Эта ссылка как-то помешает удалить из памяти кнопку?
__________________
Reality.getBounds(this);

Старый 27.02.2012, 21:50
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 5  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Wolsh, спасибо за наставление. В принципе, логично. Если внутри кнопки повесить слушатель на себя, и в ней же создать обработчик. То при удалении кнопки не будет кого слушать и не будет кому обрабатывать слушатель...
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 27.02.2012, 23:45
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Если внутри кнопки повесить слушатель на себя, и в ней же создать обработчик.
Какая разница, внутри или снаружи?
Вы считаете, что когда я передаю кнопке коллбэк (хэндлер, листенер), то ссылка на кнопку приобретает бессмертие? Да нет же. Бессмертие приобретает ссылка "на меня", поскольку она сохраняется в списке слушателей кнопки, в самой кнопке. И пока жива кнопка и я не отписался от её событий, эта ссылка будет там жить. И если я решу удалить "себя", не отписавшись, у меня ничего не выйдет – поскольку существует активная ссылка "на меня". Но у меня нет никаких мистических ссылок на кнопку. Нет у меня никакого массива "кого я слушаю". Есть обычная переменная-ссылка, которой я пользовался, когда вешал слушателя на эту кнопку. Но если я ее обнулю – где у меня останется ссылка на кнопку?
При удалении объекта надо отписать этот объект от тех событий, которые он слушает. Потому что у тех, кого он слушает, есть ссылка на него. Пока на него есть ссылки, GC его не заберет.
А не наоборот.
__________________
Reality.getBounds(this);

Старый 28.02.2012, 03:16
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 7  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Wolsh, спасибо за развернутый ответ. Хочу уточнить, правильно ли я понял. Дальше речь пойдет в том плане, что лишь у "меня" есть ссылка на кнопку.

Если "я" обюнулю кнопку - слушатели ее удалятся, потому что список хендлеров(ссылка на "меня") удалится. Тогда кнопка уничтожится из памяти.

Если же НЕ удалять кнопку, а обнулить лишь себя, то ни я ни кнопка не удалятся из памяти. Потому что в кнопке будет ссылка на экземпляр "меня" (на мои обработчики). Поэтому от слушателя нужно отписаться явно; список обработчиков в кнопке удалится. Значит в кнопке не останется на меня ссылок. Я обнуляю себя. Так как я единственный, кто когда-то знал про кнопку - то кнопка тоже умирает.
Я правильно понял?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 28.02.2012, 10:46
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 8  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Да, если "я" единственный, кто про нее знает, то есть кнопка была добавлена в "мой" список отображения, и больше ни у кого ссылок на нее нет, она умрет при обнулении "меня". Вроде это естественно.
__________________
Reality.getBounds(this);

Старый 28.02.2012, 12:15
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 9  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
...Поэтому от слушателя нужно отписаться явно; список обработчиков в кнопке удалится.
В этом случает отписываться не обязательно.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 28.02.2012, 12:42
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 10  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Цитата:
Сообщение от alatar Посмотреть сообщение
В этом случает отписываться не обязательно.
alatar, тогда я уже ничего не понимаю . Я так понимаю, есть два способа:
1. Обнулить кнопку (ссылка кнопки на "меня" удалится), слушатели удалятся, кнопка удалится. Потом обнулить себя. Мы с кнопкой уничтожены.
2. Отписаться от слушателя кнопки (ссылка кнопки на "меня" удалится). Потом обнулить себя. В кнопке нет ссылок на "меня", а я - единственный владелец ссылки на кнопку. Мы с кнопкой уничтожены.
Как во втором случае можно не отписываться? Использовать слабые ссылки?
__________________
Я мало чего умею, но зато хорошо умею учиться...

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:13.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:13.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.