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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.04.2010, 18:27
sinya вне форума Посмотреть профиль Отправить личное сообщение для sinya Посетить домашнюю страницу sinya Найти все сообщения от sinya
  № 1  
Ответить с цитированием
sinya
 
Аватар для sinya

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
По умолчанию removeChild и сборка мусора

Привет!

Хочу уточнить, как навсегда убрать мувиклип со сцены и из памяти. В учебниках рассказывают, что если нет слушателей и ссылок на обьект, то после removeChild(obj) он уходит в небытие.

у меня такой код:
Код:
var mc:MyMC = new MyMC();
addChild(mc);
mc.play();
removeChild(mc);
при выполнении этого кода mc исчезает, но код внутри него продолжает выполняться (я поставил трейс внутри него, и трейс периодически выводится, показывая, что mc проигрывается). Почему он не удалился? Неужели его нужно остановить перед удалением? Если он подметается сборщиком мусора не сразу, то когда?
__________________
Платон мне друг, но истина в вине.

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
я думаю как минимум на него ссылаются переменные
__________________
Коллекционирую чужие ActionScript Блоги

Старый 08.04.2010, 23:20
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Сообщение от random13 Посмотреть сообщение
я думаю как минимум на него ссылаются переменные
Ну и что? Переменные освобождаются как только управление покидает функцию (случаи с анонимными функциями которые захватывают весь контекст переменных и держат его пока эту функцию никто не прибьет и до нее не доберется GC не всчет)

Здесь чисто у GC не было повода пошевилиться и очистить память.
Уничтожить объект в обход GC нельзя - так что перед удалением на него ссылок - осанови его - это общепринятая практика.

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

Регистрация: Oct 2006
Адрес: Москва
Сообщений: 889
Цитата:
Сообщение от expl Посмотреть сообщение
Ну и что? Переменные освобождаются как только управление покидает функцию (случаи с анонимными функциями которые захватывают весь контекст переменных и держат его пока эту функцию никто не прибьет и до нее не доберется GC не всчет)

Здесь чисто у GC не было повода пошевилиться и очистить память.
Уничтожить объект в обход GC нельзя - так что перед удалением на него ссылок - осанови его - это общепринятая практика.
вот по этому я и написал как минимум, еще может быть масса факторов почему объект не зануляется, кстати помимо локальных переменных, еще могут быть переменные класса... короче читаем мука, и читаем 50 тем которые поднимают каждую неделю о об уборке за собой мусора
__________________
Коллекционирую чужие ActionScript Блоги

Старый 08.04.2010, 18:48
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
блин да из кода же видно все. ты ж сам все правильно написал: если нет ссылок на объект. а сам что? removeChild(mc) сделал, а mc=null нет.
__________________
Поймай яблоко 2!

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

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
гм, а когда мне писать mc = null? Если до removeChild(mc), то он не поймет, что ему ремувить, если после - то сборщик мусора разочаруется, т.к. при removeChild(mc), mc != null. Сам-то пробовал?
__________________
Платон мне друг, но истина в вине.

Старый 08.04.2010, 20:08
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от sinya Посмотреть сообщение
бла-бла-бла... Сам-то пробовал?
регулярно.
на "бла-бла-бла" тебе ответили: после (разумеется)

а теперь по существу. ты что тут спрашиваешь?
- как гарантировать смерть ненужного уже мувика?
- или как инициировать немедленное его удаление — поторопить GC?

на первый вопрос тебе дали исчерпывающие ответы с кодом даже.
на тему второго (который вдруг всплыл) вот
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
после removeChild
__________________
местонахождение

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

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
При таком коде невидимый mc продолжает проигрываться:
Код:
var mc:MyMC = new MyMC();
addChild(mc);
mc.play();
removeChild(mc);
mc = null;
__________________
Платон мне друг, но истина в вине.

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

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Больше кода давайте. Где то там у вас косяк.

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

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

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


 


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


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