|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Можно ли Loader объявить локально для разовой загрузки?
Задался вопросом, чтобы наверняка быть уверенным...
Если мне нужно, например, разово по нажатию какой-нибудь кнопки выполнить загрузку чего-либо. Могу ли Loader объявить не на уровне класса, а локально в методе и там же зарегистрировать обработчик? Понятно, что больше не смогу обратиться к этому Лоадеру из других методов, но он мне и не нужен больше. После того как onClick отработал, есть вероятность того, что onComplete не сработает в итоге? (Например, зачистится сборщиком, пока будет загружаться весомый файл...) Хотя в официальной документации примеры так и приведены с локальным объявлением.. public class Example extends Sprite { public function Example() { } public function onClick(e:MouseEvent):void { var ldr:Loader = new Loader(); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); ldr.load(new URLRequest('http://test.ru/link')); addChild(ldr); } private function onComplete(e:Event):void { e.currentTarget.removeEventListener(Event.COMPLETE, onComplete); } }
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Eсли ты напишешь по форме — this.addChild(ldr), то собственными глазами увидишь, как отдаешь ссылку на лоадер некоему this. После такого кто ж его удалит, он же памятник.
Добавлено через 13 минут Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Короткий ответ, да можно.
1) Добавляй в дисплей лист не Loader, а его содержимое 2) Подписывайся на другие события загрузчика, на тот случай, если COMPLETE не сработает, например из-за проблем с сетью, или отсутствием файла, а в их обработчиках отписывайся от всего, на что подписал загрузчик Или можешь сделать так: Тогда никаких ссылок не останется
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Wolsh, про addChild понял - отдаю некоему this ссылку. А если, например, я делаю addChild внутри onComplete ? Тогда по идее объектом ldr может заинтересоваться сборщик до того, как сработал onComplete ?
..... public function onClick(e:MouseEvent):void { var ldr:Loader = new Loader(); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); ldr.load(new URLRequest('http://test.ru/link')); } private function onComplete(e:Event):void { e.currentTarget.removeEventListener(Event.COMPLETE, onComplete); addChild(e.target.content); } ..... 1) да, так и делаю - на скорую руку не заметил. Спасибо 2) uncaughtErrorEvents никогда не использовал... Обычно использую IOErrorEvent.IO_ERROR и HTTPStatusEvent.HTTP_STATUS . Ознакомлюсь
__________________
кто не отвечает, того garbage collector забирает |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
Если заморачивает, лучше сделать приватную переменную. Если это динамическая галерея, сделать массивчик для временного хранения ссылок (в onComplete ты всегда сможешь обнулить ссылку в приватном массиве, найдя свой лоадер через indexOf()).
__________________
Reality.getBounds(this); |
Часовой пояс GMT +4, время: 07:16. |
|
« Предыдущая тема | Следующая тема » |
|
|