![]() |
TextField, созданный в IDE и утечка памяти
Смотрю ссылки с помощью Dictionary (http://divillysausages.com/blog/trac...y_leaks_in_as3)
Подгружаю в главную SWF дочерний SWF с текстовым полем, созданным во FLA. Если по нему не кликать - при выгрузке SWF , ссылка исчезает, как и должна. А если кликнуть - остаётся. При этом, если я загружу SWF заново, снова кликну по текстовому полю и выгружу SWF, старая ссылка пропадет, а новая останется. То есть - остается только последняя. Никакие обработчики не вешаются. Для динамически созданного textfield'а - тоже самое, если ему установить mouseEnabled = true Что может быть? Дело в фокусе? |
Вполне возможно, что и в фокусе. Это легко проверить, посмотрев значение Stage#focus либо поменяв фокус перед выгрузкой.
Добавлено через 1 минуту P.S. это не утечка памяти, т.к. объект в конце-концов освобождается и удаляется сборщиком мусора. |
Цитата:
Если TF динамическое, то я изымаю в дестроере его из дисплейлиста, зануляю ссылку и пусть себе висит. А вот то текстовое поле, что создано во FLA, не получается удалить таким образом. И оно, вися, держит еще и весь объект SWF-ки в памяти. Пока, как вы правильно отметили, не будет почищено. Но не ранее чем фокус уйдет в другое текстовое поле. А у меня по ходу программы между кликами в одном TF и другом может пройти немло времени... Добавлено через 8 минут Но вот добавление в дестроеер stage.focus = null не помогает. Добавлено через 15 минут Более того, если я после клика в текстовое поле, кликну на сцену - фокус снимается. А толку - нет. Всё равно в памяти остается. Пока я вижу вариант, не использовать созданные в IDE текстовые поля. Тогда я могу в дестроеере дочерней SWF-ки убирать их из дисплейлиста. Только странно, почему не получается тоже самое с созданными в IDE? Добавлено через 1 час 26 минут В итоге, два вопроса: 1. Что же такое держит в памяти textfield-ы, если не фокус? 2. Почему я никак не могу отцепить от SWF textfield, созданный во FLA, в то время как динамический - можно. При этом в обоих случаях они висят в памяти, пока не будет клика на каком-то другом текстовом поле, но динамический не держит вместе с собой всю SWF в памяти. |
Как вы загружаете swf?
|
Loader'ом. В отдельный ApplicationDomain.
|
Возможно у вас нет доступа к управлению фокусом загруженного swf. Что содержит stage.focus родительской swf?
Цитата:
|
Цитата:
И всё равно... При этом, у меня в главной SWF организован механизм смены дочерних SWF по факту подгрузки. Т.е. главная (допустим, уже загрузив ранее дочернюю) загружает новую дочернюю. Та, после загрузки, подтаскивает всё что нужно (растр, конфиги и прочее) и дергает родительскую, что готова. Родительская при этом добавляет её в дисплейлист и убирает предыдущую. Затем делает анлоад предыдущей. Так вот перед самым анлоадом и делает "расфокусировку". И кроме того, в дочерних есть метод-дестроер, который висит на событии анлоад. Там-то всё чистится и удаляется. Там тоже расфокус. Там я и удаляю динамические текстовые поля. При этом они всё равно висят в памяти (что видно по MemoryTracker-у), но не держат весь объект. А вот со "встроенными" такого не получается... Цитата:
Но чего они вообще висят? P.S. В общем, буду проверять далее эти моменты. Только мне очень интересно - что держит текстовые поля?! Нигде, в различных рекомендациях по предотвращению утечек, не говорится об этом. Что делает клик на текстовом поле?! Даже на пустом. Добавлено через 1 минуту Попробую сделать "чистый пример", отдельно от всей архитектуры. |
Что за MemoryTracker?
Добавлено через 9 минут Если этот, то он довольно примитивный и указывает только на проблему, а не на ее причину. |
Да, он. Причину не вижу, но вижу по крайней мере, что за объект остался жить.
Первоначально выявилась проблема на графиках потребления памяти в MonsterDebugger. Штатно после выгрузки дочерних swf память возвращается в исходное состояние. P.S. Сейчас, на "чистом примере" мне не удаётся повторить "залипание" текстового поля. Значит это я что-то надерьмокодил :/ |
http://www.flasher.ru/forum/blog.php?b=627 как вариант.
|
| Часовой пояс GMT +4, время: 11:06. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.