|
|
|||||
Регистрация: Dec 2008
Адрес: Одесса
Сообщений: 129
|
Полное удаление объекта
Всем привет. Столкнулся в проекте с проблемой удаления объекта со сцены, вроде как удалил его, но внутренний контент все равно присутствует, слышны звуки, делает запросы к серверу, в общем ощущение что не удалил а сделал visible=false (хотя removeChild почти так и делает).
Покопавшись в проекте выхода не нашел, поиски тоже не дали результата, делаю самый простой эксперимент: открываю чистую флешку, в библиотеке мувик, на 5ом кадре мувика код Далее динамически добавляю его на сцену и тут же удаляю: Но trace не прекращается никогда. Что не так? Ссылка осталась? Хорошо делаю так чтобы не было ссылок: Но trace не прекращается никогда... Подскажите пожалуйста. |
|
|||||
Удаление объекта со сцены - это не удаление самого объекта. пока на ваш var m:MovieClip = new symbol(); есть ссылка, то есть пока m указывает на объект класса symbol (названия классов лучше с большой буквы), объект не удалится.
Более того, если занулить ссылку, m = null, объект удалится из памяти не сразу - он будет существовать в куче пока до него не доберется сборщик мусора. Такой код называется управляемым. Поищите еще информации про сборщик мусора и правила работы с объектами в AS3 |
|
|||||
Регистрация: Dec 2008
Адрес: Одесса
Сообщений: 129
|
Материала начитался везде одно и тоже, меня интересует проблема с примером, который я привел. Здесь ведь нету ни ссылок ни слушателей.
|
|
|||||
Цитата:
Цитата:
|
|
|||||
В таких случаях внутри удяляемого объекта слушается событие Event.REMOVED_FROM_STAGE, в обработчике описывается деактивация объекта, выключение музыки, отписывание от всяких ненужных событий и прочие действия, для того чотбы он не дергался, а спокойненько ждал сборщик мусора. Есть еще не очень хороший вариант при котором сборщик мусора можно вызвать самому, описан о тут
__________________
ответ прост: be || !be == true |
|
|||||
Цитата:
Если бы этот трейс был не в кадрах, а например в onEnterFrame, то во избежании таких казусов во время ожидания GC надо было бы отписать этот onEnterFrame при удалении со стейдж. А так, если оно что-то в кадре делает - ну флаг сделайте и при удалении со стейдж выставляйте в false - при добавлении на стейдж - в true. Как проверить, что Вы впринципе не оставили ссылок на объект? - после уборки со стейджа написать System.gc() и запустить флешку в дебажном флеплеере - трейсы должны прекратиться (в релизе оставлять нельзя - падать будет, на худой конец директивами компилятора обернуть) - посмотреть профайлером |
|
|||||
Регистрация: Dec 2008
Адрес: Одесса
Сообщений: 129
|
Беда в том что эксперимент проводил во flash cs, во FD да, можно это все отследить как то.
В целом что понял - адоб реально не доделал плеер, это вроде логично если удалил объект со сцены то он тебе совсем не нужен, не смотря на то что есть подписчики, внутри объекта есть какие то другие объекта воспроизводящие звуки, видео или просто картинки, или все же есть такие ситуации когда объект нужно удалить но все ссылки внутренний контент и т.д. должно остаться? Приведите пример если кто делал такое нарочно. Клипал проект пол года и тут вдруг понадобилось чтобы была возможность загрузка-выгрузка-загрузка, пару раз туда-сюда и 500 метров памяти готово, вот я и попал по неопытности |
Часовой пояс GMT +4, время: 16:23. |
|
« Предыдущая тема | Следующая тема » |
Теги |
removeChild |
Опции темы | |
Опции просмотра | |
|
|