![]() |
Как грамотно убить мувик?
Как убить мувик, чтобы он исчез бесследно и не засорял память? При этом переменную, ссылающуюся на него, не удалять, а просто приравнять null.
|
Удалить его из дисплай листа и заnullить на него все ссылки.
Приравнивание ссылки к null равнозначно удалению этой самой ссылки, ровно как и приравнивание к какой-нибудь другой ссылки. Короче, если переменная перестал на него ссылаться по любой из причин - ссылка от этой переменной на него удалена. |
Да нефига, и диспетчер задач тому подтверждение, плеер грузит память как мула. И не ссылку надо удалить, а сам клип.
|
Да что вы? Считаете что null объект может грузить память? вы ошибаетесь. Тигра прально написал
|
Да я не против, но с каждым s=new mov(); память нагружается очередной сотней килобайт.
|
и будет нагружаться до тех пор, пока GC не соизволит ее почистить.
все тут верно написали. |
Цитата:
|
- удалить из дисплей листа
- обнулить все ссылки - удалить все евент листнеры - остановить таймеры И после этого объект удалится не мгновенно а только когда у виртуальной машины дойдут до этого руки. Если все условия выполнены, а флэшка продолжает жрать память, то надо запустить флэшбилдерпро и воспользоваться профайлером |
Вопрос в тему, а что если у мувика есть вложенные мувики? Их нужно каждый убивать или достаточно убить родительский мувик?
|
Достаточно убить родительский.
|
Тогда еще один вопросик.
Вот код: Код AS3:
Флешка изначально отжирает 17мегов памяти Так вот, если сделать это (пересоздать уровень) несколько раз, то флешка отжирает до 100мегов, затем потребление памяти падает. Причем каждый раз падает по разному, но еще ни разу не упало обратно до 17 мегов. Это нормально? (Тестирую в Stand-alone debug плеере). |
Смотреть нужно в профайлере, а не через диспетчер задач или всякие там Sysem.totalMemory.
Если не знаете что такое профайлер - ищите в гугле. Заодно поищите про Garbage Collector. |
Цитата:
|
Таймера будут выполнятся, ну и что с ними? =)
Например в примере у silin`а при запуске GC (наверняка все видели) работала подпика на ENTER_FRAME. И ведь убивалась =) С таймерами наверняка та же фигня. Тут речь уже скорее об эмуляции что всё отошло в мир иной, а вопрос был о достаточности отхода. |
Цитата:
зачем тратить ресурсы на вычисления внутри объекта который должен быть удалён? |
Цитата:
Цитата:
|
А как удалить объект, если на него имеется только ссылка?
Код AS3:
|
Цитата:
|
Цитата:
А вот по удалению самого объекта... Уточню. Есть мувиклип А. В нем Б. А уже в нём 20 мувиклипов. В мувиклипе А: Код AS3:
|
Если требуется удалить очень сложный объект, в котором много чего напихано, лучше отдельно прописать метод 'destroy' или что то в этом духе, куда вам придется вручную прописать удаление всех листенеров, таймеров, интервалов, ссылок и пр. все, из-за чего мусорщик может считать объект активным. Достаточно хлопотно, но еще лучше строить объект level таким образом, чтобы не приходилось его удалять, а можно было бы модифицировать при изменившихся обстоятельствах, а удалять в нем простые объекты, если нужно.
|
Цитата:
Уважаемые профессионалы, помогите, пожалуйста. ) |
Может вам лучше не удалять, а возвращать в стек? А когда обьект нужен, то не создавать, а брать из стека, если там есть.
|
| Часовой пояс GMT +4, время: 06:09. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.