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

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

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

Регистрация: Dec 2008
Адрес: Одесса
Сообщений: 129
По умолчанию Полное удаление объекта

Всем привет. Столкнулся в проекте с проблемой удаления объекта со сцены, вроде как удалил его, но внутренний контент все равно присутствует, слышны звуки, делает запросы к серверу, в общем ощущение что не удалил а сделал visible=false (хотя removeChild почти так и делает).
Покопавшись в проекте выхода не нашел, поиски тоже не дали результата, делаю самый простой эксперимент:
открываю чистую флешку, в библиотеке мувик, на 5ом кадре мувика код
Код AS3:
trace("я все еще здесь")
Далее динамически добавляю его на сцену и тут же удаляю:
Код AS3:
var m:MovieClip = new symbol();
addChild(m);
removeChild(m);
Но trace не прекращается никогда. Что не так? Ссылка осталась? Хорошо делаю так чтобы не было ссылок:
Код AS3:
function create()
{
	var m:MovieClip = new symbol();
	addChild(m);
	removeChild(m);
}
create();
Но trace не прекращается никогда... Подскажите пожалуйста.

Старый 05.09.2013, 19:33
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 2  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Удаление объекта со сцены - это не удаление самого объекта. пока на ваш var m:MovieClip = new symbol(); есть ссылка, то есть пока m указывает на объект класса symbol (названия классов лучше с большой буквы), объект не удалится.
Более того, если занулить ссылку, m = null, объект удалится из памяти не сразу - он будет существовать в куче пока до него не доберется сборщик мусора. Такой код называется управляемым.

Поищите еще информации про сборщик мусора и правила работы с объектами в AS3

Старый 05.09.2013, 20:21
Ralph_DiMarko вне форума Посмотреть профиль Отправить личное сообщение для Ralph_DiMarko Найти все сообщения от Ralph_DiMarko
  № 3  
Ответить с цитированием
Ralph_DiMarko
 
Аватар для Ralph_DiMarko

Регистрация: Dec 2008
Адрес: Одесса
Сообщений: 129
Материала начитался везде одно и тоже, меня интересует проблема с примером, который я привел. Здесь ведь нету ни ссылок ни слушателей.

Старый 05.09.2013, 20:40
KumoKairo вне форума Посмотреть профиль Отправить личное сообщение для KumoKairo Найти все сообщения от KumoKairo
  № 4  
Ответить с цитированием
KumoKairo
 
Аватар для KumoKairo

Регистрация: Jan 2013
Сообщений: 550
Записей в блоге: 1
Цитата:
Более того, если занулить ссылку, m = null, объект удалится из памяти не сразу - он будет существовать в куче пока до него не доберется сборщик мусора.
Цитата:
Материала начитался везде одно и тоже,
а покажите что вы читали? Мне не верится, если честно, что там такие примеры не приводились

Старый 05.09.2013, 20:58
amesqit вне форума Посмотреть профиль Отправить личное сообщение для amesqit Найти все сообщения от amesqit
  № 5  
Ответить с цитированием
amesqit
 
Аватар для amesqit

Регистрация: Oct 2007
Сообщений: 255
Записей в блоге: 1
В таких случаях внутри удяляемого объекта слушается событие Event.REMOVED_FROM_STAGE, в обработчике описывается деактивация объекта, выключение музыки, отписывание от всяких ненужных событий и прочие действия, для того чотбы он не дергался, а спокойненько ждал сборщик мусора. Есть еще не очень хороший вариант при котором сборщик мусора можно вызвать самому, описан о тут
__________________
ответ прост: be || !be == true

Старый 06.09.2013, 16:37
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Но trace не прекращается никогда... Подскажите пожалуйста.
Если ещё где-нибудь не завязались(подписка функции принадлежащей этому мувику на внешний диспетчер тоже считается завязкой) - прекратится когда-нибудь

Если бы этот трейс был не в кадрах, а например в onEnterFrame, то во избежании таких казусов во время ожидания GC надо было бы отписать этот onEnterFrame при удалении со стейдж.
А так, если оно что-то в кадре делает - ну флаг сделайте и при удалении со стейдж выставляйте в false - при добавлении на стейдж - в true.

Как проверить, что Вы впринципе не оставили ссылок на объект?
- после уборки со стейджа написать System.gc() и запустить флешку в дебажном флеплеере - трейсы должны прекратиться (в релизе оставлять нельзя - падать будет, на худой конец директивами компилятора обернуть)
- посмотреть профайлером

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

Регистрация: Dec 2008
Адрес: Одесса
Сообщений: 129
Беда в том что эксперимент проводил во flash cs, во FD да, можно это все отследить как то.
В целом что понял - адоб реально не доделал плеер, это вроде логично если удалил объект со сцены то он тебе совсем не нужен, не смотря на то что есть подписчики, внутри объекта есть какие то другие объекта воспроизводящие звуки, видео или просто картинки, или все же есть такие ситуации когда объект нужно удалить но все ссылки внутренний контент и т.д. должно остаться? Приведите пример если кто делал такое нарочно.
Клипал проект пол года и тут вдруг понадобилось чтобы была возможность загрузка-выгрузка-загрузка, пару раз туда-сюда и 500 метров памяти готово, вот я и попал по неопытности

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

Теги
removeChild
Опции темы
Опции просмотра

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

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


 


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


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