Как определить глобальную переменную, доступ к которой можно получить в любом месте приложения?
Возможный дубликат:
Глобальная цель переменной int c
Я хотел бы создать глобальную переменную.
Я хочу получить доступ к этой переменной где угодно.
Явный эквивалент:
static var score:int = 0;
Например, если я определяю глобальные переменные в классе Game.
Как получить доступ к этой глобальной переменной?
Game.score ?
Ответы
Ответ 1
Если у вас несколько видов в приложении, и в этом случае вы хотите, чтобы переменная была доступна для каждого представления, вы всегда должны создавать класс Model/Data и определять переменную в ней. Что-то вроде этого:
//DataClass.h
@interface DataClass : NSObject {
NSString *str;
}
@property(nonatomic,retain)NSString *str;
+(DataClass*)getInstance;
@end
//DataClass.m
@implementation DataClass
@synthesize str;
static DataClass *instance = nil;
+(DataClass *)getInstance
{
@synchronized(self)
{
if(instance==nil)
{
instance= [DataClass new];
}
}
return instance;
}
Теперь в вашем контроллере просмотра вы должны вызвать этот метод как:
DataClass *obj=[DataClass getInstance];
obj.str= @"I am Global variable";
Эта переменная будет доступна для каждого контроллера вида. Вам просто нужно создать экземпляр класса Data.
Ответ 2
Objective-C не поддерживает "переменные класса" напрямую. Вместо этого вы можете создать переменную, которая действительна для области файла класса и получить к ней доступ с помощью методов класса.
// outside the implementation
static int score = 0; // static means it is only accessible from the current file
@implementation Game
+ (int)score {
return score;
}
+ (void)setScore:(int)newScore {
score = newScore;
}
Ответ 3
Предпочтительный способ реализации глобальных переменных в проекте iOS (хотя это не настоящие глобальные переменные) заключается в создании свойства в делетете приложения, а затем просто доступ к этому свойству из каждого из ваших классов.
EDIT: Перечитав свой вопрос, похоже, я неправильно истолковал ваш вопрос, а ответ ughoavgfhw - это, вероятно, то, что вы ищете. Он прав, в переменной Objective-C нет такой вещи, как переменная класса, поэтому вам нужно создать обычную статическую переменную C, а затем создать методы класса (обозначенные +
, а не -
) для настройки и получения.
Хотя обычно, когда мне нужны "глобальные" переменные в приложении, я создаю классы singleton для размещения их и связанных с ними методов (поэтому делегат приложения не переполняется несвязанными свойствами), или если это меньший проект, я просто используйте делегат приложения (который также является одиночным классом), а не отдельные синглтоны. Хотя нет ничего плохого в подходах статической переменной плюс класс setter/getter, если это работает лучше для ваших нужд.