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

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

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

Регистрация: Sep 2005
Адрес: Snezhinsk, Russia
Сообщений: 367
Отправить сообщение для firsoff с помощью ICQ Отправить сообщение для firsoff с помощью Skype™
По умолчанию "правильное" уничтожение экземпляра класса

Есть визуальный класс, который делает некоторую работу, по окончании которой его нужно удалить. ссылка на экземпляр созданного класса хранится как свойство экземпляра класса "менеджера" (может сложно выражаюсь). Удаляю следующим образом:
1. removeChild
2. удаляю все события связанные с экз. визуального класса (или проще использовать useWeakRefence = true)
3. делаю свойство экземпляра класса "менеджера" = null
Все ли верно? Удалит ли после этих событий "сборщик мусора" ненужный визуальный класс в памяти?
C уважением.

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
думаю первое нужно сделать последним... если уж на то пошло)
может я ошибаюсь)

Старый 01.07.2008, 18:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от ramshteks Посмотреть сообщение
может я ошибаюсь)
Ошибаетесь.

firsoff, примерного кода отсюда не видно, а по терминологии ясности нет.

Старый 01.07.2008, 18:34
firsoff вне форума Посмотреть профиль Отправить личное сообщение для firsoff Посетить домашнюю страницу firsoff Найти все сообщения от firsoff
  № 4  
Ответить с цитированием
firsoff

Регистрация: Sep 2005
Адрес: Snezhinsk, Russia
Сообщений: 367
Отправить сообщение для firsoff с помощью ICQ Отправить сообщение для firsoff с помощью Skype™
Код:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;

	public class Master extends Sprite
	{
		private var _slave:Slave;
		//	CONSTRUCTOR
		// КЛасс хозяин
		public function Master() 
		{
			_slave = new Slave();
			// используем мягкие ссылки
			_slave.addEventListener(Event.ADDED_TO_STAGE, handleAdded, false, 0, true);
			addChild(_slave);
			someWork();
			
			// удаление из памяти
			removeChild(_slave);
			_slave = null;
			// ну все сборщик милости просим (вызываем известный хак для GarbageCollector)
		};
		
		private function someWork():void
		{
			/*
			 * какая то работа с _slave
			 * */
		};
		
		private function handleAdded(event:Event):void 
		{
			// обработчик просто для примера
		};
	};

public class Slave extends Sprite
	{
		
		//	CONSTRUCTOR
		public function Slave() 
		{
			// визуальный класс
		};
		
		
	};
};
Проблема в том что "slave" классов визуальных много, и в какой то момент их надо все удалит и пересоздать с новым контентом и так много раз, и мне хочется чтобы ненужные экземпляры точно удалялись сборщиком а не висели мертвым грузом.

Старый 01.07.2008, 19:00
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 5  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от firsoff Посмотреть сообщение
Код:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;

	public class Master extends Sprite
	{
		private var _slave:Slave;
		//	CONSTRUCTOR
		// КЛасс хозяин
		public function Master() 
		{
			_slave = new Slave();
			// используем мягкие ссылки
			_slave.addEventListener(Event.ADDED_TO_STAGE, handleAdded, false, 0, true);
			addChild(_slave);
			someWork();
			
			// удаление из памяти
			removeChild(_slave);
			_slave = null;
			// ну все сборщик милости просим (вызываем известный хак для GarbageCollector)
		};
		
		private function someWork():void
		{
			/*
			 * какая то работа с _slave
			 * */
		};
		
		private function handleAdded(event:Event):void 
		{
			// обработчик просто для примера
		};
	};

public class Slave extends Sprite
	{
		
		//	CONSTRUCTOR
		public function Slave() 
		{
			// визуальный класс
		};
		
		
	};
};
Проблема в том что "slave" классов визуальных много, и в какой то момент их надо все удалит и пересоздать с новым контентом и так много раз, и мне хочется чтобы ненужные экземпляры точно удалялись сборщиком а не висели мертвым грузом.
Хак использовать не надо. Слабые ссылки тоже, надо отписываться от событий. И проблем не будет.

Старый 01.07.2008, 20:43
firsoff вне форума Посмотреть профиль Отправить личное сообщение для firsoff Посетить домашнюю страницу firsoff Найти все сообщения от firsoff
  № 6  
Ответить с цитированием
firsoff

Регистрация: Sep 2005
Адрес: Snezhinsk, Russia
Сообщений: 367
Отправить сообщение для firsoff с помощью ICQ Отправить сообщение для firsoff с помощью Skype™
меня больше интересует если _slave = null не сделать, то экземпляр класса останется в памяти? ведь получается на него остается ссылка в экз. класса Master, иными словами присвоение null обязательно?

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

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

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


 


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


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