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

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

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
У вас может быть несколько таких объектов одного класса? Т.е. в разных частях программы разные такие списки с разными объектами одних и тех же классов? Если да, то dictionary лучший вариант.
А если от каждого класса создаётся только один объект, то это синглтон, и можно хранить ссылку на объект в самом классе. Вот так
Код AS3:
package  {
	public class Singleton {
		public function Singleton() {
		}
 
		private static var _instance:Singleton;
 
		public static function get instance():Singleton {
			if (!_instance) _instance = new Singleton();
			return _instance;			
		}	
	}
}
Добавлено через 1 минуту
и пользовать соответственно потом
Код AS3:
Singleton.instance
.
__________________
:)

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Aquahawk, большое спасибо за информацию. Я знаю что такое синглтон . Только не совсем понимаю какая мне разница - хранить список в синглтоне или как статический массив в каком-нибудь служебном классе.
Например я оперирую 10-ю разными классами. Список только один. В этом списке по одному объекту каждого из этих 10-ти классов. Они не повторяются в списке. Я создал массив этих 10-ти экземпляров. Сделал этот массив как статическое свойство некоего класса. Именно статическое, так как этот список мне понадобится в любой момент и неизвестно где. Да - можно сделать синглтон, но суть не изменится от этого.
А вот за пример с Dictionary - был бы вам очень благодарен. Читал в справке про эти словари - но там слишком скудно написано и всегда бросал эту затею, так как не совсем понятно что это такое и как его юзать..
__________________
Я мало чего умею, но зато хорошо умею учиться...


Последний раз редактировалось HardCoder; 15.03.2012 в 01:22.
Старый 15.03.2012, 01:31
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 13  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Код AS3:
package {
	import flash.display.Sprite;
	import flash.utils.Dictionary;
 
	public class Main extends Sprite {
 
		private var _dic:Dictionary;
 
		public function Main():void {
			this._dic = new Dictionary();
			this._dic[ExampleClass1] = new ExampleClass1();
			this._dic[ExampleClass2] = new ExampleClass2();
			this._dic[ExampleClass3] = new ExampleClass3();
 
			test1();
			test2();
			test3();
		}
 
		public function test1():void {
			(_dic[ExampleClass1] as ExampleClass1).test();
		}
 
		public function test2():void {
			(_dic[ExampleClass2] as ExampleClass2).test();
		}
 
		public function test3():void {
			(_dic[ExampleClass3] as ExampleClass3).test();
		}
	}
}
 
class ExampleClass1 {
	public function test():void {
		trace("obj1");
	}
}
 
class ExampleClass2 {
	public function test():void {
		trace("obj2");
	}
}
 
class ExampleClass3 {
	public function test():void {
		trace("obj3");
	}
}
Добавлено через 3 минуты
Dictionary это таблица где ключами являются сами объекты, выражаясь в терминах низкоуровневых языков, ключом является адрес ключевого объекта, а значение тоже объект. Но поскольку в as класс представлен в рантайме в виде объекта типа Class то всё хорошо работает.

Добавлено через 5 минут
А хранить я вам предлагал не список в синглтоне, а вообще не делать список. Если у вас десять таких классов то сделать каждого из них синглтоном и пусть он сам себе ссылку на свой объект и хранит. Вообще без списка, нужен объект этого класса, у него и взяли.

Добавлено через 6 минут
но словарь лучше, больше возможности для расширения.
__________________
:)


Последний раз редактировалось Aquahawk; 15.03.2012 в 01:44.
Старый 15.03.2012, 01:44
HardCoder вне форума Посмотреть профиль Отправить личное сообщение для HardCoder Найти все сообщения от HardCoder
  № 14  
Ответить с цитированием
HardCoder
 
Аватар для HardCoder

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Aquahawk, спасибо большое. То есть, если у меня есть список экземпляров некоторых классов, то с помощью дикшнери я могу вытащить любой экземпляр по названию класса?
Код AS3:
this._dic = new Dictionary();
this._dic[ExampleClass1] = new ExampleClass1();
this._dic[ExampleClass2] = new ExampleClass2();
this._dic[ExampleClass3] = new ExampleClass3();
trace(_dic[ExampleClass1]);
Тогда мне в данном случае это подходит.
Только вот интересно, что будет если объекты повторятся?
Код AS3:
this._dic = new Dictionary();
this._dic[ExampleClass1] = new ExampleClass1();
this._dic[ExampleClass2] = new ExampleClass2();
this._dic[ExampleClass2] = new ExampleClass2();
trace(_dic[ExampleClass2]);
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 15.03.2012, 01:54
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 15  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Код AS3:
this._dic[ExampleClass2] = new ExampleClass2(); // создали объект и записали по этому ключу
this._dic[ExampleClass2] = new ExampleClass2(); // создали второй объект и записали по этому же ключу
в результате этих двух строк в словаре будет одна запись с одним объектом, последним. Ссылка на тот объект который был там до этого будет потеряна и объект будет съеден GC если на него больше нет нигде ссылок. Короче дважды создадим объект, но в словаре окажется только последний. Если хочестся много объектов, то можно сгородить словарь векторов.
__________________
:)

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

блогер
Регистрация: Apr 2011
Сообщений: 583
Записей в блоге: 2
Ага, ну тогда спасибо. Тема исчерпана - движемся в сторону словарей...
__________________
Я мало чего умею, но зато хорошо умею учиться...

Старый 15.03.2012, 01:58
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 17  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Код AS3:
package {
	import flash.display.Sprite;
	import flash.utils.Dictionary;
 
	public class Main extends Sprite {
 
		private var _dic:Dictionary;
 
		public function Main():void {
			this._dic = new Dictionary();
			this._dic[ExampleClass1] = new Vector.<ExampleClass1>();
			(this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1());
			(this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1());
 
			this._dic[ExampleClass2] = new Vector.<ExampleClass2>();
			(this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2());
			(this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2());
			(this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2());
 
			this._dic[ExampleClass3] = new Vector.<ExampleClass3>();
			(this._dic[ExampleClass3] as Vector.<ExampleClass3>).push(new ExampleClass3());
 
			this.test1();
			this.test2();
			this.test3();
		}
 
		public function test1():void {
			for each (var exObj:ExampleClass1 in this._dic[ExampleClass1]) {
				exObj.test();
			}
		}
 
		public function test2():void {
			for each (var exObj:ExampleClass2 in this._dic[ExampleClass2]) {
				exObj.test();
			}
		}
 
		public function test3():void {
			for each (var exObj:ExampleClass3 in this._dic[ExampleClass3]) {
				exObj.test();
			}
		}
	}
}
 
class ExampleClass1 {
	public function test():void {
		trace("obj1");
	}
}
 
class ExampleClass2 {
	public function test():void {
		trace("obj2");
	}
}
 
class ExampleClass3 {
	public function test():void {
		trace("obj3");
	}
}
вот так если много хочется
__________________
:)


Последний раз редактировалось Aquahawk; 15.03.2012 в 02:02.
Старый 15.03.2012, 11:35
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 18  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Код AS3:
			this._dic[ExampleClass1] = new Vector.<ExampleClass1>();
			(this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1());
			(this._dic[ExampleClass1] as Vector.<ExampleClass1>).push(new ExampleClass1());
 
			this._dic[ExampleClass2] = new Vector.<ExampleClass2>();
			(this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2());
			(this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2());
			(this._dic[ExampleClass2] as Vector.<ExampleClass2>).push(new ExampleClass2());
 
			this._dic[ExampleClass3] = new Vector.<ExampleClass3>();
			(this._dic[ExampleClass3] as Vector.<ExampleClass3>).push(new ExampleClass3());
Ужас какой. А ссылки на что?

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

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Psycho Tiger писал в час ночи копипастом чисто чтоб показать идею. Согласен что ужас.
__________________
:)

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

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

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


 


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


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