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

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

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
По умолчанию Как правильно удалять Child -ов из памяти

Допустим есть Sprite, в который addChild-ом добавлены много экземпляров разных классов.
как правильно удалить из не всех детей
Код AS3:
while(this.spr1.numChildren>0){
    this.spr1.removeChildAt(0);
}
это понятно, но при утом мы удаляем только визуально со сцены, но как я знаю они все равно остаются в памяти, как затем удалять из из памяти. Если сделать такую манипуляцию this.spr1 = null а потом создать спрайт заного, дети удалятся?
Но это мне кажется что это какой то костыль.
Подскажите плиз как удалять детей бесследно.

Старый 09.08.2012, 08:30
Srednas вне форума Посмотреть профиль Отправить личное сообщение для Srednas Найти все сообщения от Srednas
  № 2  
Ответить с цитированием
Srednas

Регистрация: Nov 2010
Сообщений: 430
Визуально удалить это
Код AS3:
this.spr1.getChildAt(0).visible = false;
А removeChild в справке описан так:
Цитата:
Удаляет дочерний DisplayObject из заданной позиции индекса в списке потомков DisplayObjectContainer. Свойство parent удаленного потомка получает значение null, а сам объект очищается, если нет других ссылок на потомка. Позиции индекса экранных объектов, расположенных над потомком в DisplayObjectContainer уменьшаются на 1.

Сборка мусора — это процесс, с помощью которого проигрыватель Flash Player перераспределяет неиспользуемую память. Когда на переменную или объект больше нет ссылок или он хранится в другом месте, сборщик мусора очищает и утилизирует память, которую он занимал, при условии отсутствия ссылок
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

Старый 09.08.2012, 08:55
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 3  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
ну вот допустим код
Код AS3:
var sprite1:Sprite  = new Sprite();
for (var i:int = 0;i<5;i++){
     var obj = new ObjectClass();
     sprite1.addChild(obj);
}
 
while(this.sprite1.numChildren>0){
    this.sprite1.removeChildAt(0);
}
 
после этого как я понимаю ссылки на объекты obj  остаются, как очистить память от них.
мусорщик ух не уберет.

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

Регистрация: Nov 2010
Сообщений: 430
Цитата:
Сообщение от Isfet Посмотреть сообщение
после этого как я понимаю ссылки на объекты obj остаются, как очистить память от них.
мусорщик ух не уберет.
Почему вы так считаете?
__________________
Лучше спросить и выставить себя дураком на пять минут, чем не спросить и остаться дураком на всю жизнь.

Старый 09.08.2012, 10:06
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 5  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
ну как видно из документации мусорщик не удаляет объекты на которые еще сохранились ссылки.
а на эти объекты сохранятся ссылки если создавать их в функции?


Последний раз редактировалось Isfet; 09.08.2012 в 10:18.
Старый 09.08.2012, 11:15
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 6  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Цитата:
Сообщение от Isfet Посмотреть сообщение
ну вот допустим код
Код AS3:
var sprite1:Sprite  = new Sprite();
for (var i:int = 0;i<5;i++){
     var obj = new ObjectClass();
     sprite1.addChild(obj);
}
 
while(this.sprite1.numChildren>0){
    this.sprite1.removeChildAt(0);
}
 
после этого как я понимаю ссылки на объекты obj  остаются, как очистить память от них.
мусорщик ух не уберет.
Ссылка останется только на sprite1. И то не ясно, где описана эта переменная.
Если не поле класса и наружу ссылок не выдавали, то ничего в памяти не останется.
Как же вы интересно обратитесь к obj после выполнения кода этой функции?
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 09.08.2012, 11:43
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 7  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
обращусь по слушателю мыши, прописанному в классе.
спасибо за ответы

Старый 09.08.2012, 16:39
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 8  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Про слушатели вы не упоминали.
Отписываться надо.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

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

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Цитата:
Сообщение от Isfet Посмотреть сообщение
но при утом мы удаляем только визуально со сцены, но как я знаю они все равно остаются в памяти, как затем удалять из из памяти.
Из памяти вы во флэше ничего никогда не удаляете(за редким исключением). Есть простое правило - нужно чтобы на объект не было ссылок. Тогда сборщик мусора сможет удалить объект из памяти. Если вы добавляете визуальный объект в контейнер, ссылка на визуальный объект сохраняется в контейнере. Когда вы удаляете объект из контейнера - ссылка тоже зануляется. И если это была единственная связь с объектом, он может быть удален сборщиком мусора.
Также ссылки на объекты порождаются в результате подписки на события. Еще ссылки вы можете создать вручную - поля класса, объекта, переменные и т.д.
Про локальные переменные тоже надо упомянуть - локальные переменные(ссылки на объекты) удаляются после завершения выполнения функции или метода. Соответственно, нет ссылки - объект доступен сборщику мусора.
Цитата:
Сообщение от Isfet Посмотреть сообщение
Если сделать такую манипуляцию this.spr1 = null а потом создать спрайт заного, дети удалятся?
Но это мне кажется что это какой то костыль.
Подскажите плиз как удалять детей бесследно.
Это не костыль. Это просто не сработает. Занулеине ссылки на spr1 ничего не делает с самим объектом и не удаляет его из дерева отображения. Вобще нет смысла в данном действии.

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

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
тоесть если в экземпляре класса есть хоть одна паблик переменная или функция к которой есть обращение , или слушатель или где нибудь еще храниться ссылка на этот укземпляр , то мусорщик его не соберет?

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

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

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


 


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


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