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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.07.2009, 01:05
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 1  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
По умолчанию "Природа" существования и удаления объектов

Хотелось бы узнать, как стереть само значение объекта из приложения во время работы (дабы оно не засоряло память).
removeChild всего лишь удаляет DisplayObject из списка отображения
а delete по тому же Муку:
"Удаляет динамическую переменную экземпляра объекта."

Из списка отображения убрали, переменную удалили, а что с самим объектом? его как снести?

Второй момент - если переменной с объектом присвоить другой объект, то значение первичного объекта удаляется или переменная просто начинает ссылаться на другой объект?

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

блогер
Регистрация: Apr 2009
Адрес: НиНо
Сообщений: 185
Записей в блоге: 12
Цитата:
Второй момент - если переменной с объектом присвоить другой объект, то значение первичного объекта удаляется или переменная просто начинает ссылаться на другой объект?
Мои знания ООП подсказывают мне, что если на объект нету других ссылок, то он уходит в распоряжение Garbage Collector'а, то есть ты его не вернёшь, но он немного живёт.

По первому пункту ничего не знаю, но всё скорее упирается в запуск этого GC

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

Регистрация: May 2009
Сообщений: 63
Тот же Мук, в своей книге отлично дает понять, что "вручную" удалить из памяти созданный объект или значение переменной нельзя, можно лишь сделать объект доступным для "сборки мусора" удалив все существующие ссылки на него.

Система сборки мусора (Garbage Collector) предназначена для автоматической очистки памяти, и запускается, когда минимальное ее количество, отведенное Flash ролику, превышается. В зависимости от сложности программы, "сборщик" периодически проверяет и "помечает" объекты, к которым больше нельзя обратится, как "доступные для удаления", после чего помеченные значения впоследствии удаляются в "цикле зачистки". Самостоятельно запустить и управлять системой сборки мусора во Flash невозможно. Она запускается самостоятельно и отлично справляется со своей задачей (при минимуме усилий от программиста).

В общем чтобы "удалить" объект из памяти достаточно позаботится об отсутствии ссылок на него (присвоить переменной значение новое значение, очистить интервал, удалить слушатель события и.т.д...)

Поправьте меня, если в чем-то ошибся.


Последний раз редактировалось Аллиас; 28.07.2009 в 01:44.
Старый 28.07.2009, 01:52
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 4  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
таким образом конструкция:
Код AS3:
addChild(new Sprite());
создаст спрайт который удалить невозможно никак ? кроме, разве что, случая с удалением самого объекта parent

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

Регистрация: Jan 2008
Адрес: Украина, Славутич
Сообщений: 646
Отправить сообщение для willis83 с помощью ICQ
removeChildAt

Старый 28.07.2009, 02:09
switcher! вне форума Посмотреть профиль Отправить личное сообщение для switcher! Найти все сообщения от switcher!
  № 6  
Ответить с цитированием
switcher!

Регистрация: May 2009
Сообщений: 220
а если индексов сотни? ))))
но возможность есть - согласен.
Спасибо всем! разобрался

Старый 28.07.2009, 10:13
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 7  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Эм... То есть ссылок на объект нет, но объект находится в списке отображения, то GC его не съест, так как мы можем обратиться к нему методами клипа-контейнера?
Просто слышал где-то истории про исчезающие с экрана кнопки, ссылки на которые терялись и их съедал GC... Аж жуть...
__________________
Стой! Опасная зона! Работа мозга!

Старый 28.07.2009, 11:35
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 8  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
ссылки могут потеряться. Недавно столкнулся с этим.
Например, если ты создаешь в цикле большое количество лоадеров:
Код:
loader = new Loader (); 
loader.load (new URLRequest(str)); 
info = loader.contentLoaderInfo;
info.addEventListener (Event.COMPLETE, styleBtnLoadCompleteHandler);
info.addEventListener (IOErrorEvent.IO_ERROR, styleBtnIOErrorHandler);
То GC может их съесть!
Пришлось сделать так
Код:
tempArray.push(loader);
тогда не съедает, пока не освободишь массив.

Такая же проблема есть у стандартных адобовских Tween. Если не сохранить твин в ссылке - он может умереть.

Старый 28.07.2009, 11:46
marat_sa вне форума Посмотреть профиль Отправить личное сообщение для marat_sa Посетить домашнюю страницу marat_sa Найти все сообщения от marat_sa
  № 9  
Ответить с цитированием
marat_sa
 
Аватар для marat_sa

Регистрация: Nov 2006
Сообщений: 487
Отправить сообщение для marat_sa с помощью ICQ Отправить сообщение для marat_sa с помощью Skype™
Да, про твины в курсе.

2 iflamberg, а если экземпляр лоадера или подгружаемого объекта сразу кинуть в список отображения в твоем случае? Тогда его съест красная рука GC?
__________________
Стой! Опасная зона! Работа мозга!

Старый 28.07.2009, 11:49
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 10  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
очень сомневаюсь

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

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

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


 


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


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