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

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

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

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
По умолчанию Вопрос по целесообразности применения статических методов для деактивации объектов

Решил все часто используемые функции вынести в общий класс.
Для того, чтобы постоянно не создавать новый экземпляр класса, решил сделать все методы в нем статическими.
Поэтому возник следующий вопрос про целесообразность некоторых из них: является ли необходимым наличие метода disposeCommonLoader и его дальнейшее применение?
Хотелось бы разобрать этот вопрос на примере загрузчика.
Вот мой класс:
Код AS3:
package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.events.Event;
import flash.net.URLRequest;
 
public class CommonFunctions extends Sprite {
 
	public static var commonLoader:Loader;
 
	public function GameGraphics() {
 
	};
 
	public static function loadObject(adress:String, commonOnLoad:Function):void {
		var commonLoaderUrlReq:URLRequest = new URLRequest(adress);
		commonLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, commonOnLoad);
		commonLoader.load(commonLoaderUrlReq);
	};
 
	public static function disposeCommonLoader(commonOnLoad:Function):void {
		commonLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, commonOnLoad);
		commonLoader = null;
	};		
};
}
Как видно, функция слушателя события у меня должна располагаться где-нибудь во внешнем классе, который использует приведенный выше. Например,
Код AS3:
//Где то во внешнем классе
private function loadSomething() {
	CommonFunctions.commonLoader = new Loader();
	CommonFunctions.loadObject("http://www.example.com, onLoadSomething);
};
 
private function onLoadSomething)(e:Event):void {
	CommonFunctions.disposeCommonLoader(onLoadSomething));
};
Вот и становится мне не понятно, стоит ли принудительно обнулять лоадер с помощью статического метода и удалять слушатель, либо при следующем запуске сборщика мусора за мной все подчистится само (ведь экземпляра самого класса CommonFunctions нету)?


Последний раз редактировалось Furinax; 30.12.2009 в 13:32.
Старый 30.12.2009, 14:34
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Зато есть экземпляр класса Loader и на него навешаны слушатели.

Старый 30.12.2009, 14:47
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 3  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Но ведь при дальнейшем использовании статических методов класса, переменной экземпляра commonLoader будет присваиваться новый экземпляр класса Loader. И что тогда будет с прошлым экземпляром: он удалится сборщиком мусора или же так и останется висеть, так как commonLoader является переменной экземпляра?

Старый 30.12.2009, 15:01
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Удалится. При условии. что Вы не оставите ссылку на event.target в обработчике onLoadSomething
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.12.2009, 16:04
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 5  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Значит не зря я написал функцию деактиваци. Буду продолжать в том же направлении, всем спасибо!

Старый 30.12.2009, 16:21
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Чего только люди не придумают.
А вот Вы скажите, зачем нужна ссылка на лоадер "Где то во внешнем классе"?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 30.12.2009, 16:32
Furinax вне форума Посмотреть профиль Отправить личное сообщение для Furinax Найти все сообщения от Furinax
  № 7  
Ответить с цитированием
Furinax
[+1 02.09.15]

Регистрация: Mar 2009
Адрес: Moscow
Сообщений: 469
Ну раз разницы нету во внешнем она или во внутреннем, то пусть будет во внешнем. Это дает мне возможность сократить количество строк кода, активируя лоадер с помощью всего одной строки.

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

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

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


 


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


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