Показать сообщение отдельно
Старый 20.05.2012, 00:09
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
не, ну у меня же в других функциях удаление, а т.к. объект создан динамически - по прямой ссылке ругается - нет его в области переменных класса..... или я не правильно понимаю
Цитата:
означает ли это, что если у меня друг за другом идут подгрузка 3-х swf то возможно памяти остается очень мало и становится только хуже.
Какой тогда выход?
Есть такой хороший принцип: "не понимаешь зачем - не делай". Не понимаете как удаляются объекты из памяти - не надо пытаться городить функции, которые их _якобы_ удаляют - просто к отсутствию результата добавится куча кода.
Иногда лучше чего-то не сделать и огрести (чтобы понять), чем полжизни копипастить "10 волшебных строчек", потому что так ваши деды и прадеды делали - а почему и зачем - никто не помнит.

А теперь без философии:
- на один и тот же объект может быть несколько ссылок с разных частей программы. Если вы одну занулите - это же не повод для флешплеера ломать работу всем остальным ссылающимся. Поэтому удаляет сборщик мусора, когда не ссылается никто
- pPic = null ничего не удаляет - оно просто убивает ссылку, и теперь на этот объект эта часть системы объект не держит в памяти - что делают другие части - это их проблемы.
- нахождение отбекта в списке отображение тоже считается ссылкой на него и мешает сборке (оно было бы странно, если бы объект исчезал с экрана без вызова removeChild, а просто так, потому что GC до него дополз)

Т.е. правила просты:
Есть часть системы - нужен объект - сохранеям ссылку - не нужен - убираем
Нужно убрать с экрана - убираем (это уже ресурсы экономит), нужно при этом ссылку оставить, чтобы потом его добавить - оставляем.
Ббольше не нужен части кода, но должен остаться на экране? - Просто занулите ссылку - кому надо удалят его с экрана.
И не морочим себе голову написанием чудо-функций "удалятелей" - это не C++.
Когда объект не будет никому требоваться - GC его сам удалит. А если он кому-то требуется - как его можно удалять?

Есть конечно более тонкие нюансы, когда надо знать время "становления объекта ненужным", например при использовании пулов и подписке-отписке листенеров в объекте на "не принадлежащий" ему объект, но это всё потом


Последний раз редактировалось expl; 20.05.2012 в 00:19.