Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Глобальные переменные Objective-C

0

Вместо   #define программисты   Objective-C   обычно   используют   для   хранения постоянных значений глобальные переменные.

Давайте  дополним  нашу  программу.  Класс  с  именем  NSLocale содержит

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

Например, сели вы хотите узнать, какая денежная единица используется в локальном контексте пользователя, это делается так:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])

{

@autoreleasepool {  NSLog(@"\u03c0 is %f", M_PI);

NSLog(@"%d is larger", MAX(10, 12));

NSLocale *here = [NSLocale currentLocale];

NSString *currency = [here objectForKey:@"currency"]; NSLog(@"Money is %@", currency);

}

return 0;

}

Постройте и запустите программу. В зависимости от того, где вы находитесь, результат может выглядеть примерно так:

Money is USD

Но если при вводе ключа будет допущена ошибка (например,@"Кurunсу"), вы не получите никаких данных. Для предотвращения подобных проблем в библиотеке Foundation определяется глобальная переменная с именем NSLoca1eCurrencyCode. Вряд ли ее проще вводить, но зато если при вводе будет допущена ошибка, компилятор ее заметит. Кроме того, автозавершение кода в Xcode нормально работает для глобальной переменной, но не для строки @"currency". Измените код так, чтобы в нем использовалась константа:

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])

{

@autoreleasepool {  NSLog(@"\u03c0 is %f", M_PI);

NSLog(@"%d is larger", MAX(10, 12));

NSLocale *here = [NSLocale currentLocale];

NSString *currency = [here objectForKey:NSLocaleCurrencyCode]; NSLog(@"Money is %@", currency);

}

return 0;

}

При написании масса NSLoca1e эта глобальная переменная встречалась в двух

местах. В файле NSLocale.h переменная была объявлена примерно так

extern NSString const *NSLocaleCurrencyCode;

Ключевое слово соnst говорит о том, что указатель не будет изменяться в течение всего жизненного цикла программы. Ключевое слово extern означает: «Я

гарантирую, что это существует, но оно определяется в другом файле». И действительно, файл NSLocale.m содержит строку следующего вида:

NSString const *NSLocaleCurrencyCode = @"currency";

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии