当我尝试通过调用静态方法(定义中带有 + )来初始化方法内的静态变量时,编译器声称出现错误:“初始化器元素不是常量”。 无论如何我可以告诉他这个方法总是返回相同的值。我知道这与静态方法不同,但 Objective-C 中似乎没有常量方法(除了宏之外,宏在这里不起作用,因为我从方法内部调用 UI_USER_INTERFACE_IDIOM() )。
最佳答案
除了Yuji的解决方案之外,其实还有另一种解决方案。您可以创建一个函数并在其前面加上 GCC 属性(也适用于 Clang 和 LLVM),这将导致该函数在 main()
之前执行。我已经多次使用这种方法,它看起来像这样:
static NSString *foo;
__attribute__((constructor)) initializeFoo() {
foo = ...;
}
当你实际使用foo
时,它已经被初始化了。这意味着您不必每次都检查它是否为 nil。 (这当然是一个较小的性能优势,尽管乘以您使用它的次数,但它也可以简化一个或多个其他代码区域。例如,如果您在 N 个不同的地方引用静态变量,您可能会检查所有 N 中的 nil
或存在崩溃风险。通常,人们会调用函数或使用 #define
来处理初始化,并且该代码实际上仅使用一次,这可能是一个值得取消的惩罚。
关于objective-c - objective-c : Initializing static variable with static method call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2811686/