Показать сообщение отдельно
Старый 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 сам отписывать события или же многие спустя рукава на всё это смотрят?