Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > Общие вопросы Web
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2013, 19:25   #1
demon112
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 11
По умолчанию Flash правильное удаление обьектов

Подскажите какие из этих обьектов удалятся, а какие нет.

Код:
s1, s2:Sprite

// 1
addChild(s1);
removeChild(s1);
s1 = null; // ну тут как я понимаю все должно очиститься?!

// 2
addChild(s1);
s1.addChild(new Sprite());
removeChild(s1);
s1 = null; // как быть тут?? удалятся все обьекты или ни одного?

// 3
public class Sprite1 extends Sprite
{
  var main:Main;
  ......
  function Sprite1(s:Main)
  {
    main = s;
  }
  ......
  main.removeChild(this);
  ......
}

addChild(new Sprite1(this));
demon112 вне форума Ответить с цитированием
Старый 09.01.2013, 22:00   #2
rocket-ua
Пользователь
 
Аватар для rocket-ua
 
Регистрация: 21.01.2011
Сообщений: 46
По умолчанию

в первом случае со сцены удалится все что находится в s1 (если что-то есть в нем) и собственно сам спрайт s1.
во втором случае то же самое что и в первом.
в третьем случае при учете что Sprite1 находится на Main, то со сцены удалиться Sprite1
rocket-ua вне форума Ответить с цитированием
Старый 10.01.2013, 06:12   #3
demon112
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 11
По умолчанию

ну спасибо большое. а вот еще вопросик:

addChild(s1);
s1.addChild(s2);
s2.addEventListener(MouseEvent.Clic k, onClick);
removeChild(s1);
s1 = null;

Сейчас второй спрайт удалится? или он удалится только после s2.removeEventListener(MouseEvent.C lick, onClick)?
demon112 вне форума Ответить с цитированием
Старый 10.01.2013, 14:26   #4
rocket-ua
Пользователь
 
Аватар для rocket-ua
 
Регистрация: 21.01.2011
Сообщений: 46
По умолчанию

Удалиться со стейджа и s1 и s2. Удалится сам объект s1 так как делается обнуление. Объект s2 не удалиться.

Не путай удаление некого отображения со стейджа и удаление самого объекта, это разные вещи. Например вот так вот:
Код:
addChild(s1);
s1 = null;
в таком случае на стейдже останется объект, но при попытке обратится к свойству или вызвать функцию у s1 получишь ошибку что не удается вызвать свойство или метод со ссылкой на объект "null".

А вот в этом случае:
Код:
addChild(s1);
removeChild(s1);
можно спокойно работать с объектом s1 но не видеть его на стейдже и снова при необходимости добавить его на стейдж.

Последний раз редактировалось rocket-ua; 10.01.2013 в 15:07.
rocket-ua вне форума Ответить с цитированием
Старый 10.01.2013, 15:20   #5
demon112
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 11
По умолчанию

Чет я неодуплил до конца... Т.е. в третьем примере (в первом посте который описан) обьект удалится только со сцены, но останется в памяти?
demon112 вне форума Ответить с цитированием
Старый 10.01.2013, 15:29   #6
rocket-ua
Пользователь
 
Аватар для rocket-ua
 
Регистрация: 21.01.2011
Сообщений: 46
По умолчанию

Да, именно так.
rocket-ua вне форума Ответить с цитированием
Старый 10.01.2013, 16:35   #7
demon112
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 11
По умолчанию

А как его удалить тогда?
demon112 вне форума Ответить с цитированием
Старый 10.01.2013, 18:26   #8
rocket-ua
Пользователь
 
Аватар для rocket-ua
 
Регистрация: 21.01.2011
Сообщений: 46
По умолчанию

если на объект нет сильных ссылок и он удален со сцены то его когда-то теоретически может собрать гарбач коллектор. Или же самому ручками его обнулить.
rocket-ua вне форума Ответить с цитированием
Старый 10.01.2013, 19:01   #9
demon112
Пользователь
 
Регистрация: 22.07.2012
Сообщений: 11
По умолчанию

ну теперь вроде все ясно. спасибо. А почему теоретически то? т.е. на практики этого не происходит?
demon112 вне форума Ответить с цитированием
Старый 10.01.2013, 21:38   #10
rocket-ua
Пользователь
 
Аватар для rocket-ua
 
Регистрация: 21.01.2011
Сообщений: 46
По умолчанию

Ну потому что не понятно когда он доберется до объекта что бы удалить его
Можно вызвать принудительную очистку мусора вот так: System.gc(), но это только для дебаговой версии флешплеера.
rocket-ua вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подключить класс flash.filesystem от Adobe AIR в JPEXS Free Flash Decompiler ArtGrek Общие вопросы Web 2 12.02.2017 02:52
Помогите найти программу для создания flash роликов, Flash анимации Илья Квашнин Общие вопросы Web 2 29.01.2016 22:55
Правильное удаление двумерного динамического массива Gdasar C++ Builder 3 23.02.2015 02:30
Правильное удаление строки в БД с определённым id .. shytka PHP 36 12.07.2010 13:05
Правильное удаление Blob-поля из базы Neeter БД в Delphi 5 15.05.2009 17:37