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

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

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

Регистрация: Nov 2010
Сообщений: 111
По умолчанию Сборщик мусора

Всем привет,

Я создаю класс и добавляю его на рабочую область.
Код AS3:
public var _Map:Map;
_Map = new Map();
zone_bg.addChild(_Map);
_Map.init();
Внутри него создаю множество мувиклипов, других мелких классов.

Затем я удаляю этот класс путем
Код AS3:
zone_bg.removeChild(_Map);
, нужно ли мне перед этим удалять вручную все созданное в этом классе ? Или флеш позаботится обо всем за меня?

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

Регистрация: Oct 2006
Сообщений: 2,281
нужно удалить ссылку на объект, отписаться от всех событий исходящих от этого объекта, отписаться от всех событий внутри объекта и все остальное почистит флэш.
И разберитесь уже чем класс отличается от объекта.

Старый 10.07.2016, 21:52
zackscript вне форума Посмотреть профиль Отправить личное сообщение для zackscript Найти все сообщения от zackscript
  № 3  
Ответить с цитированием
zackscript
 
Аватар для zackscript

Регистрация: Jan 2014
Сообщений: 181
Отправить сообщение для zackscript с помощью Skype™
http://help.adobe.com/ru_RU/as3/mobi...7189-7ffc.html

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

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Сообщение от undefined Посмотреть сообщение
нужно удалить ссылку на объект, отписаться от всех событий исходящих от этого объекта, отписаться от всех событий внутри объекта и все остальное почистит флэш.
И разберитесь уже чем класс отличается от объекта.
првильно ли я понимаю что в каждом ребенке основного класса нужно слушать удаляется ли родитель и чистить все переменные

Код AS3:
 
//класс родителя
private var SomeVar: ChildClass;
 
public function ParentClass(){
addChild(Somevar)
this.addEventListener(Event.REMOVED, onRemove);
}
private function onRemove(e:Event):void{
removeEvetListener(Event.REMOVED, onRemove);
removechild(Somevar);
Somevar = null;
}
Код AS3:
 
//ChildClass
private var str: string= 'txt';
private var text: textfield;
 
public function ChildClass(){
//bla bla bla
addChild(text);
 
this.addEventListener(Event.REMOVED, onRemove);
}
private function onRemove(e:Event):void{
removeEvetListener(Event.REMOVED, onRemove);
str = null;
removechild(text);
text = null;
}
все верно?

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
PsychoTech,
Не обязательно. Если внешних ссылок больше не осталось, все вложенные элементы тоже будут удалены.
Удалить переменную собственноручно в AS3 не возможно, str=null - это операция присвоения, а не удаления.

Для того, чтобы некоторое дерево из дисплей объектов удалилось, необходимо:
1. Удалить корневой элемент из дисплей листа. Именно удалить, visible=false - это не удаление.
2. Удалить все внешние ссылки, которые ссылаются хотя бы на один из элементов древа. Если есть хоть одна внешняя ссылка на любой элемент древа, оно всё продолжит жить. (Все элементы древа имеют ссылки друг на друга)
3. Ссылки могут остаться в листенерах, про которые вы забыли. Например, если есть слушатель на stage, который обрабатывается в методе дочернего элемента древа. Если вы использовали таймеры, их тоже необходимо остановить, активный таймер и всё на что он ссылается через слушатели не будет удален, пока активен.

И ещё не стоит писать весь код приложения "в кадрах" или использовать сцены (FlashIDE). Это одна из потенциальных проблем утечек, имхо.
__________________
Дети не должны знать о своих родителях

Старый 18.07.2016, 21:15
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 6  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Сообщение от Tails Посмотреть сообщение
PsychoTech,
И ещё не стоит писать весь код приложения "в кадрах" или использовать сцены (FlashIDE). Это одна из потенциальных проблем утечек, имхо.
я работаю исключительно в феде. моя сцена это спрайт на котором собирается все что необходимо. С другим способом вывести все на экран как-то не ознакомлен. Если есть другой способ, то будьте добры ссылку на материал или своими словами в кратце.
на счет str= null, этот как раз идет из видимо плохо усвоеного адобовского материала. там явно говориться чтобы присваивали всем значение null, чтобы автосборщик мусора это убрал.
На счет слушателей, это я если не ошибаюсь впитал с первым молоком так сказать, а именно из книги Мука. Не буду в даваться в подробности прочтения, по нему собственно и учился, потом ощутил недостаток знаний и сполз на мануалы классов от аддоба. Хотя там временами встречается довольно таки сложные к восприятию материалы. В я это к тому что всех слушателей событий включая и свои собственные я научился удалять еще до того как научился писать hello world на as3.

Старый 18.07.2016, 23:38
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 7  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Я просто перечислил три типичные проблемы утечек. В каждом конкретном случае нужно сидеть и искать причину в коде, пытаться изолировать. В ходе дискуссий мы тут наврядли это выясним. Занулять абсолютно всё не обязательно, достаточно что-бы не было внешних ссылок.
__________________
Дети не должны знать о своих родителях

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Слушать удаление родителя, чтобы подчищать что-то там - очень плохая идея. Может получиться так, что данные зачистятся, а объект нужно использовать повторно.
Самый лучший способ удалять данные - написать отдельный метод dispose() в каждом своем классе, в этом методе произвести все зачистки, и явным образом его вызывать при необходимости на всех объектах
__________________
Ко мне можно и нужно обращаться на ты)

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Самый лучший способ удалять объекты в системах с garbage collector — занулять ссылки на эти объекты. Костыли в виде dispose() до добра не доводят.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 20.07.2016, 18:00
undefined вне форума Посмотреть профиль Отправить личное сообщение для undefined Найти все сообщения от undefined
  № 10  
Ответить с цитированием
undefined

Регистрация: Oct 2006
Сообщений: 2,281
так одно другому не мешает
Код AS3:
myObj.dispose();
myObj=null;
либо
Код AS3:
myObj.dispose();
myObj=new MyObj();
Или предлагается какая-то другая реализация dispose?

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

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

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


 


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


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