我正在尝试确定是否有一个优雅的解决方案来解决这个问题。
假设我在某个标头中定义了一个全局变量:
常量.h:
extern NSString *someGlobal;
然后我希望在其他类中使用这个全局:
Foo.m
NSString *localVariable = someGlobal;
如果我像这样初始化全局,这一切都很好:
常数.m:
NSString *someGlobal = @"Some String Literal";
但是可以说我需要将全局初始化为不是编译时常量的东西。在这种情况下,我通常会这样做:
常数.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
] 之类的代码?