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

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

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

Регистрация: Apr 2010
Сообщений: 170
По умолчанию Отписывание от событий

Всем доброго дня!

Всё таки довольно таки странный вопрос, но мне хочется как бы всё по правильному. Вот обычный код для каждой программы:

Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
 
	public class main extends MovieClip
	{
		public function main()
		{
			if(stage)
				Start();
			else
				addEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
		}
 
		private function OnAddedToStage(_event:Event):void
		{
			removeEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
			Start();
		}
 
		private function Start():void
		{
 
		}
 
	}
 
}
Вроде всё понятно. Такой пример я видел много раз. В некоторых же примерах встречал вот так:

Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
 
	public class main extends MovieClip
	{
		public function main()
		{
			if(stage)
				Start();
			else
				addEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
		}
 
		private function OnAddedToStage(_event:Event):void
		{
			Start();
		}
 
		private function Start():void
		{
 
		}
 
	}
 
}
То есть особо не уделяется внимания освобождению прослушки. Я же пишу вот так:

Код AS3:
package 
{
	import flash.display.MovieClip;
	import flash.events.Event;
 
	public class main extends MovieClip
	{
		private var isAddedToStageListener:Boolean=false;
 
		public function main()
		{
			if(stage)
			{
				Start();
			}
			else
			{
				isAddedToStageListener=true;
				addEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
			}
		}
 
		private function OnAddedToStage(_event:Event):void
		{
			if(isAddedToStageListener) removeEventListener(Event.ADDED_TO_STAGE,OnAddedToStage);
 
			Start();
		}
 
		private function Start():void
		{
 
		}
 
	}
 
}
Для меня конечно мой вариант правильный, так как он сам подписывает и сам отписывает (но выглядит не очень красиво). Как вообще стоит писать? Просто будет ли Flash сам отписывать события или же многие спустя рукава на всё это смотрят?

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

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

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


 


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


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