![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
Хотелось бы узнать, как стереть само значение объекта из приложения во время работы (дабы оно не засоряло память).
removeChild всего лишь удаляет DisplayObject из списка отображения а delete по тому же Муку: "Удаляет динамическую переменную экземпляра объекта." Из списка отображения убрали, переменную удалили, а что с самим объектом? его как снести? Второй момент - если переменной с объектом присвоить другой объект, то значение первичного объекта удаляется или переменная просто начинает ссылаться на другой объект? |
|
|||||
|
Цитата:
По первому пункту ничего не знаю, но всё скорее упирается в запуск этого GC |
|
|||||
|
Регистрация: May 2009
Сообщений: 63
|
Тот же Мук, в своей книге отлично дает понять, что "вручную" удалить из памяти созданный объект или значение переменной нельзя, можно лишь сделать объект доступным для "сборки мусора" удалив все существующие ссылки на него.
Система сборки мусора (Garbage Collector) предназначена для автоматической очистки памяти, и запускается, когда минимальное ее количество, отведенное Flash ролику, превышается. В зависимости от сложности программы, "сборщик" периодически проверяет и "помечает" объекты, к которым больше нельзя обратится, как "доступные для удаления", после чего помеченные значения впоследствии удаляются в "цикле зачистки". Самостоятельно запустить и управлять системой сборки мусора во Flash невозможно. Она запускается самостоятельно и отлично справляется со своей задачей (при минимуме усилий от программиста). В общем чтобы "удалить" объект из памяти достаточно позаботится об отсутствии ссылок на него (присвоить переменной значение новое значение, очистить интервал, удалить слушатель события и.т.д...) Поправьте меня, если в чем-то ошибся. Последний раз редактировалось Аллиас; 28.07.2009 в 01:44. |
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
таким образом конструкция:
создаст спрайт который удалить невозможно никак ? кроме, разве что, случая с удалением самого объекта parent |
|
|||||
|
removeChildAt
|
|
|||||
|
Регистрация: May 2009
Сообщений: 220
|
а если индексов сотни? ))))
но возможность есть - согласен. Спасибо всем! разобрался |
|
|||||
|
Эм... То есть ссылок на объект нет, но объект находится в списке отображения, то GC его не съест, так как мы можем обратиться к нему методами клипа-контейнера?
Просто слышал где-то истории про исчезающие с экрана кнопки, ссылки на которые терялись и их съедал GC... Аж жуть...
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
Регистрация: 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); Пришлось сделать так тогда не съедает, пока не освободишь массив. Такая же проблема есть у стандартных адобовских Tween. Если не сохранить твин в ссылке - он может умереть. |
|
|||||
|
Да, про твины в курсе.
2 iflamberg, а если экземпляр лоадера или подгружаемого объекта сразу кинуть в список отображения в твоем случае? Тогда его съест
__________________
Стой! Опасная зона! Работа мозга! |
|
|||||
|
Регистрация: Jan 2009
Сообщений: 1,651
|
очень сомневаюсь
|
![]() |
![]() |
Часовой пояс GMT +4, время: 18:53. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|