Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
#1

Создание класса, хранящего переменные всего проекта - Objective-C

03.01.2012, 16:07. Просмотров 1805. Ответов 7
Метки нет (Все метки)

Здравствуйте! Хочу создать класс, чтоб в нём хранились переменные всего проекта. И читать их и менять значения из других классов. Типа как статические переменные, только не для чтения, а для записи. Как такое осуществить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.01.2012, 16:07     Создание класса, хранящего переменные всего проекта
Посмотрите здесь:
Xcode создание нового Obj-C класса Objective-C
Переменные для всего проекта C#
C# Построить описание класса, хранящего информацию о человеке
Создание контейнера (вектора), хранящего вектора разной размерности Matlab
C# Переменные экземпляра, класса, константы и переменные readonly
C++ С++, delete в деструкторе класса не видит переменные, создаваемые new в конструкторе класса
Реализация работы с классами, конструктор, методы класса и переменные класса Java EE
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Adem
6 / 6 / 0
Регистрация: 17.04.2009
Сообщений: 34
03.01.2012, 16:23     Создание класса, хранящего переменные всего проекта #2
Objective-C
1
2
3
4
5
6
7
8
@interface MyVars : NSObject {
 
int ai, bi, ci;
float af, bf, cf;
 
}
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
@class MyVars;
 
@inteface MyClass : NSObject {
MyVars *myVars;
}
 
@property MyVars *myVars;
 
@end
Так?
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
03.01.2012, 23:05  [ТС]     Создание класса, хранящего переменные всего проекта #3
Но получается, если поменять эти переменные, находясь в любом классе, нужно создавать экземпляр класса MyClass и они поменяются только в экземпляре. А нужно, находясь в любом месте поменять их , а потом из любого места получить новые значения.
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
04.01.2012, 01:15     Создание класса, хранящего переменные всего проекта #4
Цитата Сообщение от andrei0077 Посмотреть сообщение
Но получается, если поменять эти переменные, находясь в любом классе, нужно создавать экземпляр класса MyClass и они поменяются только в экземпляре. А нужно, находясь в любом месте поменять их , а потом из любого места получить новые значения.
Классическое применение синглтона: http://ru.wikipedia.org/wiki/Одиночк...B0_Objective-C

Один объект на всю программу
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
04.01.2012, 02:11  [ТС]     Создание класса, хранящего переменные всего проекта #5
Objective-C
1
2
3
4
5
//h
@interface StaticData : NSObject
+ (StaticData*)staticData;
 
@property (readwrite , copy) NSString *string;
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//m
 
#import "StaticData.h"
 
implementation StaticData
 
@synthesize string;
 
static StaticData *staticDataInstance = nil;
 
+ (StaticData *)staticData
{
    @synchronized(self) {
        static dispatch_once_t pred;
        dispatch_once(&pred, ^{ staticDataInstance = [[self alloc] init]; });
    
    
    }
    
    return staticDataInstance;
}
Вроде всё правильно сделал но когда пытаюсь задать имя переменной из вне [[StaticData staticData] string] = @"new string name"; возникает ошибка error: assigning to 'readonly' return result of an objective-c message not allowed
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
05.01.2012, 01:56     Создание класса, хранящего переменные всего проекта #6
Вроде всё правильно сделал но когда пытаюсь задать имя переменной из вне [[StaticData staticData] string] = @"new string name"; возникает ошибка error: assigning to 'readonly' return result of an objective-c message not allowed
@property (readwrite , copy) NSString *string; это не переменная - это пропертя, то есть это только сеттер/геттер и не больше, тут возникает вопрос - к чему будет обращаться пропертя?
Ответ в наведенном примере не к чему..

я бы сделал так:
Objective-C
1
2
3
4
5
6
7
8
@interface StaticData : NSObject
{
    NSString * _string; 
}
@property (copy) NSString * string; 
 
+ (StaticData*)sharedStaticData;
+ (void)sharedStaticDataRemover;
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#import "StaticData.h"
 
implementation StaticData
 
@synthesize string = _string;
 
static StaticData *staticDataInstance = nil;
 
+ (StaticData *)sharedStaticData
{
    if (!staticDataInstance)
        staticDataInstance = [StaticData new];
    
    return staticDataInstance;
}
 
+ (void)sharedStaticDataRemover
{
    [staticDataInstance release];
}
 
-(void)dealloc
{
    [_string release];
    [super dealloc];
}
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
05.01.2012, 20:33  [ТС]     Создание класса, хранящего переменные всего проекта #7
Спасибо, прояснили тему. Последний вопрос, как теперь из других классов теперь эту переменную поменять? Я пытаюсь, он пишет, что она не обнаружена.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2012, 02:08     Создание класса, хранящего переменные всего проекта
Еще ссылки по теме:
метод абстрактного класса не видит переменные дочернего класса PHP ООП
Pascal ABC Имеется список класса (все имена разные). Определить есть ли в классе человек который побывал в гостях у всего класса
Константы для всего проекта Visual Basic .NET
Delphi Мультиязычность всего проекта в Delphi 7
C# Диаграмма классов для всего проекта

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
norge_goth
62 / 62 / 7
Регистрация: 27.01.2009
Сообщений: 279
06.01.2012, 02:08     Создание класса, хранящего переменные всего проекта #8
Спасибо, прояснили тему. Последний вопрос, как теперь из других классов теперь эту переменную поменять? Я пытаюсь, он пишет, что она не обнаружена.
подключить хэдер #import "StaticData.h" сделать:
Objective-C
1
2
StaticData * sharedData = [StaticData sharedStaticData];
sharedData.string = @"Some new string";
Yandex
Объявления
06.01.2012, 02:08     Создание класса, хранящего переменные всего проекта
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru