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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.08.2010, 15:47
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 21  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
У меня все удаляет
ОК, поехали
Код AS3:
package {
 
	/**
	 * ...
	 * @author gloomyBrain
	 */
 
	public class LinkHolder {
 
		private var _link:Object;
 
		public function LinkHolder(link:Object) {
 
			this._link = link;
 
		}
 
		public function get link():Object {
			return this._link;
		}
 
	}
 
}
Как удалять будем? =)
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 31.08.2018 в 19:43.
Старый 24.08.2010, 16:11
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 22  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Классный у тебя get — типа void

А удаляется запросто:
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	public class Main extends Sprite 
	{
		private var lh:LinkHolder;
		private var someObj:Object;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			this.someObj = { 'test':'go' };
			this.lh = new LinkHolder(this.someObj);
 
			stage.addEventListener(MouseEvent.CLICK, this.onClickHandler);
		}
 
		private function onClickHandler(e:MouseEvent):void
		{
			this.lh = null;
			// запускаем GC и наблюдаем исчезновение
			// экземпляра LinkHolder
		}
 
	}
 
}
Причем даже не надо запускать руками GC в профайлере — по клику счетчик экземпляров LinkHolder становится в ноль сразу.
__________________
Поймай яблоко 2!

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
@Zebestov
Понятно, что можно удалить ссылку на LinkHolder. Имелось ввиду удаление ссылки на link, не удаляя при этом LinkHolder
__________________
...вселенская грусть

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
хм. а зачем это делать?
__________________
Поймай яблоко 2!

Старый 24.08.2010, 16:26
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 25  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Имелось ввиду удаление ссылки на link, не удаляя при этом LinkHolder
Добавить destroy, а потом его вызвать.
Код AS3:
package
{
 
	/**
	 * ...
	 * @author gloomyBrain
	 * @mail CartoonRaccoon@gmail.com
	 */
 
	public class LinkHolder {
 
		private var _link:Object;
 
		public function LinkHolder(link:Object)
		{
 
			this._link = link;
 
		}
 
		public function destroy():void
		{
			this._link = null;
		}
 
 
		public function get link():Object
		{
			return this._link;
		}
 
	}
 
}
Или это вопрос с подвохом?

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

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Конечно с подвохом ))) нафиг нужен класс с названием "holder", который должен верно хранить ссылку на объект, который мы у него за спиной хотим прибрать с помощью GC (дзявальски хихикая под покровом ночи)
__________________
Поймай яблоко 2!

Старый 24.08.2010, 16:36
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 27  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Хм.. я вообще про то, что CASALib в принципе не может удалять все ссылки, до тех пор пока объект не IDestroyable.
__________________
...вселенская грусть

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

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

Старый 24.08.2010, 16:49
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 29  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Хм.. я вообще про то, что CASALib в принципе не может удалять все ссылки, до тех пор пока объект не IDestroyable.
Не понимаю чего так расхваливать CASALib. От того, что мы создали объект и имлементили ему касалибовский IDestroyable, ссылки чудеснейшим образом не станут удаляться сами по себе. Точно также, ручками, нужно будет прописать в destroy методе, что мы собственно зануляем и уничтожаем.
С тем же успехом можно свой IDestroyable написать и смысл не изменится.
Буди что со экранными объектами автоматизировано их рекурсивное удаление из дисплейлиста и вызов в каждом destroy - так тоже, писать метод 5 минут. Но все остальные переменные класса все равно ручками занулять в destroy нужно.

Старый 24.08.2010, 16:54
bebop вне форума Посмотреть профиль Отправить личное сообщение для bebop Найти все сообщения от bebop
  № 30  
Ответить с цитированием
bebop
 
Аватар для bebop

Регистрация: Dec 2006
Адрес: Novosibirsk
Сообщений: 93
Цитата:
Сообщение от i.o. Посмотреть сообщение
Не понимаю чего так расхваливать CASALib. От того, что мы создали объект и имлементили ему касалибовский IDestroyable, ссылки чудеснейшим образом не станут удаляться сами по себе. Точно также, ручками, нужно будет прописать в destroy методе, что мы собственно зануляем и уничтожаем.
С тем же успехом можно свой IDestroyable написать и смысл не изменится.
Буди что со экранными объектами автоматизировано их рекурсивное удаление из дисплейлиста и вызов в каждом destroy - так тоже, писать метод 5 минут. Но все остальные переменные класса все равно ручками занулять в destroy нужно.
Destroyable отписывается от событий DestroyableEventDispatcher после вызова destroy. Или это тоже 5 минут писать?

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

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

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


 


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


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