Форум 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=211799)

Vlad84 09.11.2015 18:40

Очистка загрузчиков
 
Нашел загрузчик для картинок, переведенный в ByteArray:

Код AS3:

package {
        public class ImageLoader{
 
                import flash.net.*;
                import flash.events.*;
 
                public function load(bytes:*):void {
                        var failover_loader:Loader = new Loader();
                                failover_loader.loadBytes(bytes);
                                failover_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
                }
 
                private function loadComplete(e:Event):void {
                        var loaderInfo:LoaderInfo = LoaderInfo(e.target);
                        trace(loaderInfo.width + "x" + loaderInfo.height);
                }
        }
}


Загружаю кучу фоток:
Код AS3:

for(var i:int = 0; i < 20; i++) {
        var il:ImageLoader = new ImageLoader();
                il.load(bytes);
}


Как мне удалять каждый экземпляр загрузчика после успешной загрузки?

undefined 10.11.2015 14:14

у вас область видимости переменной il - текущий метод. После выполнения всего цикла и выхода из метода ссылок на 20 ImageLoader'ов не останется что есть утечка памяти и, кстати, ваш загрузчик страдает той же самой болезнью

Vlad84 10.11.2015 14:28

undefined, как избежать этой утечки памяти?

undefined 10.11.2015 14:47

вынести объявление
Код AS3:

var il:ImageLoader

из метода на уровень класса/кадра.
и поправить загрузчик:
Код AS3:

package {
        import flash.net.*;
        import flash.events.*;
        public class ImageLoader{
 
                private var failover_loader:Loader;
                public function load(bytes:*):void {
                                failover_loader = new Loader();
                                failover_loader.loadBytes(bytes);
                                failover_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
                }
 
                private function loadComplete(e:Event):void {
                        failover_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);
                        var loaderInfo:LoaderInfo = LoaderInfo(e.target);
                        trace(loaderInfo.width + "x" + loaderInfo.height);
                }
        }
}

ПС: лучше сразу заведи привычку если подписался где-то на что-то, надо где-то и отписаться(см.код выше), иначе утечки замучают.

udaaff 10.11.2015 14:47

http://help.adobe.com/ru_RU/FlashPla...l#unload%28%29
http://help.adobe.com/ru_RU/FlashPla...dAndStop%28%29

А для чего вам байты грузить?

undefined 10.11.2015 14:50

Цитата:

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

Добавлено через 6 минут
еще момент: подписку
Код AS3:

failover_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

лучше делать до загрузки
Код AS3:

failover_loader.loadBytes(bytes);

т.к. подозреваю, что loadBytes - операция синхронная и Event.COMPLETE кинется сразу же после вызова loadBytes

Vlad84 10.11.2015 15:39

Цитата:

Сообщение от udaaff (Сообщение 1188892)

Класс FZip для работы с архивами отдает содержимое файлов в нем в виде байтов.

Добавлено через 3 минуты
Цитата:

Сообщение от undefined (Сообщение 1188893)
удалять ничего не надо, после загрузки сборщик мусора сам все почистит.

Добавлено через 6 минут
еще момент: подписку
Код AS3:

failover_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

лучше делать до загрузки
Код AS3:

failover_loader.loadBytes(bytes);

т.к. подозреваю, что loadBytes - операция синхронная и Event.COMPLETE кинется сразу же после вызова loadBytes

Нет, операция асинхронная, поэтому не важно какой строкой идет Комплит.

Спасибо за помощь.

undefined 10.11.2015 18:40

Цитата:

Нет, операция асинхронная
действительно.Интересно с чем связана задержка.


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

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