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

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

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

Регистрация: Jun 2014
Сообщений: 558
По умолчанию множественное добавление и удаление слушателей, хочу понять нюансы

Доброго!
Давно заметил, что если написать к примеру так
Код AS3:
			this.addEventListener(Event.ADDED_TO_STAGE, init);
			this.removeEventListener(Event.ADDED_TO_STAGE, init);
			this.removeEventListener(Event.ADDED_TO_STAGE, init);
то компилятор не будет ругаться.
Видимо, если слушатель удалён, то он просто игнорирует

Так вот, отсюда вопрос

Код AS3:
this.addEventListener(Event.ADDED_TO_STAGE, init);
this.addEventListener(Event.ADDED_TO_STAGE, init);
если сделать к примеру так, то создадутся 2 слушателя или один?

хочу это знать, возможно поможет искать не очевидные ошибки

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
http://help.adobe.com/ru_RU/FlashPla...ventListener()
__________________
Дети не должны знать о своих родителях

Старый 23.02.2016, 16:44
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 3  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
там про это не сказано, лишь обмолвились тем, что будет создано два события, если useCapture у них разный

Добавлено через 8 минут
просто есть момент в коде, работает всё нормально, но ели создаётся 2 события, то у меня выходит утечка памяти, хотя и крайне медленная, если нет, то всё хорошо.

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Что-то вы путаетесь, уважаемый, наверное не до конца понимаете как оно работает.
1. Есть событие.
2. Есть слушатель.

Событие - объект Event, созданный где-то в коде и отправленный на дисптечеризацию.
Слушатель - связка "Событие" + "функция", которую хранит диспетчер. (EventDispatcher)

Пишем так:
Код AS3:
var d:EventDispatcher = new EventDispatcher();
 
d.addEventListener("myEvent", onEventCallback1);
d.addEventListener("myEvent", onEventCallback2);
 
// Слушатель 1
function onEventCallback1(e:Event):void {
    trace("Слушатель 1");
}
// Слушатель 2
function onEventCallback1(e:Event):void {
    trace("Слушатель 2");
}
 
// Пуляем ОДНО событие:
d.dispatchEvent(new Event("myEvent"));
В итоге программа выдаст:
Цитата:
Слушатель 1
Слушатель 2
При этом произошла диспетчеризация одного события, но были вызваны два разных слушателя, которые приняли одно и тоже событие.
Если сделать вот так:
Код AS3:
d.addEventListener("myEvent", onEventCallback1);
d.addEventListener("myEvent", onEventCallback1);
Будет только один вызов, так-как вы уже подписали функцию onEventCallback1 на событие "myEvent".
В справке об этом сказано.
__________________
Дети не должны знать о своих родителях

Старый 23.02.2016, 17:37
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 5  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
я понимаю, что вызов будет один, вопрос в том, создадутся ли 2 слушателя или флеш, увидев, что объект уже подписан на это событие, не станет создавать его повторно

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Слушатель будет только один
__________________
Дети не должны знать о своих родителях

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Слушатели добавляются в хэш карту. Ее фишка в том, что ключи повторяться не могут, каждый ключ уникален, в отличие от простого массива. А так как ключем там выступает ссылка на метод-обработчик, то для одного метода может быть зарегистрирован только один слушатель. Так что сколько бы ты раз не писал добавление слушателя для одного типа события и одного обработчика, он все равно будет создан только в единственном экземпляре.
__________________
Ко мне можно и нужно обращаться на ты)

Старый 23.02.2016, 22:53
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 8  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
caseyryan спасибо за развёрнутый ответ

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

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

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


 


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


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