Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Вопрос по целесообразности применения статических методов для деактивации объектов (http://www.flasher.ru/forum/showthread.php?t=134440)

Furinax 30.12.2009 13:30

Вопрос по целесообразности применения статических методов для деактивации объектов
 
Решил все часто используемые функции вынести в общий класс.
Для того, чтобы постоянно не создавать новый экземпляр класса, решил сделать все методы в нем статическими.
Поэтому возник следующий вопрос про целесообразность некоторых из них: является ли необходимым наличие метода 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 нету)?

alatar 30.12.2009 14:34

Зато есть экземпляр класса Loader и на него навешаны слушатели.

Furinax 30.12.2009 14:47

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

dimarik 30.12.2009 15:01

Удалится. При условии. что Вы не оставите ссылку на event.target в обработчике onLoadSomething

Furinax 30.12.2009 16:04

Значит не зря я написал функцию деактиваци. Буду продолжать в том же направлении, всем спасибо!

dimarik 30.12.2009 16:21

Чего только люди не придумают.
А вот Вы скажите, зачем нужна ссылка на лоадер "Где то во внешнем классе"?

Furinax 30.12.2009 16:32

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


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

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