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

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

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

Регистрация: Jul 2012
Сообщений: 148
По умолчанию Очистка загрузчиков

Нашел загрузчик для картинок, переведенный в 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);
}

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

Старый 10.11.2015, 14:14
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 2  
Ответить с цитированием
undefined

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

Старый 10.11.2015, 14:28
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 3  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
undefined, как избежать этой утечки памяти?

Старый 10.11.2015, 14:47
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 4  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
вынести объявление
Код 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);
		}
	}
}
ПС: лучше сразу заведи привычку если подписался где-то на что-то, надо где-то и отписаться(см.код выше), иначе утечки замучают.

Старый 10.11.2015, 14:47
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 5  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
http://help.adobe.com/ru_RU/FlashPla...l#unload%28%29
http://help.adobe.com/ru_RU/FlashPla...dAndStop%28%29

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

Старый 10.11.2015, 14:50
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 6  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Как мне удалять каждый экземпляр загрузчика после успешной загрузки?
удалять ничего не надо, после загрузки сборщик мусора сам все почистит.

Добавлено через 6 минут
еще момент: подписку
Код AS3:
failover_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
лучше делать до загрузки
Код AS3:
failover_loader.loadBytes(bytes);
т.к. подозреваю, что loadBytes - операция синхронная и Event.COMPLETE кинется сразу же после вызова loadBytes

Старый 10.11.2015, 15:39
Vlad84 вне форума Посмотреть профиль Отправить личное сообщение для Vlad84 Найти все сообщения от Vlad84
  № 7  
Ответить с цитированием
Vlad84

Регистрация: Jul 2012
Сообщений: 148
Цитата:
Сообщение от udaaff Посмотреть сообщение
Класс FZip для работы с архивами отдает содержимое файлов в нем в виде байтов.

Добавлено через 3 минуты
Цитата:
Сообщение от undefined Посмотреть сообщение
удалять ничего не надо, после загрузки сборщик мусора сам все почистит.

Добавлено через 6 минут
еще момент: подписку
Код AS3:
failover_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
лучше делать до загрузки
Код AS3:
failover_loader.loadBytes(bytes);
т.к. подозреваю, что loadBytes - операция синхронная и Event.COMPLETE кинется сразу же после вызова loadBytes
Нет, операция асинхронная, поэтому не важно какой строкой идет Комплит.

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

Старый 10.11.2015, 18:40
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 8  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
Цитата:
Нет, операция асинхронная
действительно.Интересно с чем связана задержка.

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

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

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


 


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


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