Разработка iPhone: глобальные переменные - PullRequest
0 голосов
/ 10 сентября 2011

Я очень новичок в Objective-C.Мне нужно сделать глобальную переменную.У меня есть файлы abc.h, abc.m, aaa.h, aaa.m и, конечно, делегат приложения.

Я хочу объявить его в abc.h, используйте, чтобы пользователь назначил его вabc.m и использовать в ааа.м.Я хочу, чтобы переменная была целым числом с именем x.Я слышал, что я могу использовать App Delegate каким-то образом.Я хочу, чтобы присваивающая переменная в abc.m была реализована в середине моего кода.Поскольку я новичок, пожалуйста, сделайте это просто!

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 10 сентября 2011

Вы можете использовать свойство в делегате приложения, так как вы всегда можете получить экземпляр делегата приложения с помощью:

[ [ UIApplication sharedApplication ] delegate ]

Итак:

/* AppDelegate.h */
@interface AppDelegate: NSObject < UIApplicationDelegate >
{
    int x;
}
@property( readonly ) int x;
@end

/* AppDelegate.m */
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize x;
@end

Таким образом,уметь использовать:

[ [ [ UIApplication sharedApplication ] delegate ] x ]

Другой подход заключается в использовании глобальной переменной, объявленной как extern в вашем файле abc.h и определенной в файле abc.m.

/* abc.h */
extern int x;

/* abc.m */
int x = 0;

Таким образом, другие файлы смогут получить доступ к x, только включив abc.h.extern сообщает компилятору, что переменная будет определена позже (например, в другом файле) и что она будет разрешена во время ссылки.

1 голос
/ 10 сентября 2011

Вместо того, чтобы нести всю нагрузку в AppDelegate, я рекомендую вам создать свой собственный класс синглтона, а затем использовать его везде, где вы хотите.Вот пример создания синглтон-класса: http://www.71squared.com/2009/05/iphone-game-programming-tutorial-7-singleton-class/

0 голосов
/ 10 сентября 2011

Я бы порекомендовал создать свой собственный синглтон-класс, чтобы не загромождать делегата UIApplication.Это также делает ваш код аккуратнее.Подкласс NSObject и немного добавьте код, подобный следующему:

static Formats *_formatsSingleton = nil;
+ (Formats*) shared
{
    if (_formatsSingleton == nil)
    {
        _formatsSingleton = [[Formats alloc] init];
    }
    return _formatsSingleton;
}

Добавьте ivars и свойства к этому классу по мере необходимости.Вы можете установить значения по умолчанию в методе init, например,

- (id) init;
{
    if ((self = [super init]))
    {
        _pgGlobalIntA = 42;   // ivar for an int property called globalInt
        _pgGlobalStringB = @"hey there";   // ivar for an NSString property called globalStringB
    }
    return self;
}

А затем установить и получить доступ к ним:

 [[Formats shared] setGlobalIntA: 56];
 NSLog(@"Global string: '%@'", [[Formats shared] globalStringB]);

Метод класса shared создает экземпляркласс, если он еще не существует.Так что вам не нужно беспокоиться о его создании.Это произойдет только при первой попытке доступа или установки одного из глобальных файлов.

...