Я пытаюсь определить, есть ли элегантное решение этой проблемы.Использование «extern» global перед правильной инициализацией
Скажем, у меня есть глобальная, определенная в некоторой заголовок:
Constants.h:
extern NSString *someGlobal;
И тогда я хотел бы использовать этот глобальный в другом классе:
Foo.m
NSString *localVariable = someGlobal;
Это все работает нормально, если я инициализирую глобальный процесс следующим образом:
Constants.m:
NSString *someGlobal = @"Some String Literal";
Но позволяет сказать, что мне нужно инициализировать глобальные к чему-то, что не является константой времени компиляции. В таких случаях я обычно это сделать:
Constants.m:
@implementation Constants
+ (void)initialize {
someGlobal = ... // some non-trivial initialization
}
@end
Теперь у меня есть потенциальная проблема в Foo.m
. Если не было сделано никаких ссылок на класс Constants
, когда я пытаюсь использовать someGlobal
, результатом будет nil
. Обойти это сделать:
Foo.m (или в каком-то приложении кода запуска):
[Constants class];
Это вызовет initialize
метод Constants
класса и someGlobal
будет правильно инициализирован. До тех пор, пока это будет сделано до использования во время работы someGlobal
, все будет работать нормально.
Есть ли лучший способ инициализировать внешние глобальные переменные с некомпилируемыми константами времени без необходимости вызова кода, такого как [Constants class
] при запуске приложения?
Спасибо. Это мой нынешний подход. – rmaddy