objective-c - objective-c : Initializing static variable with static method call

标签 objective-c xcode iphone

当我尝试通过调用静态方法(定义中带有 + )来初始化方法内的静态变量时,编译器声称出现错误:“初始化器元素不是常量”。 无论如何我可以告诉他这个方法总是返回相同的值。我知道这与静态方法不同,但 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/

相关文章:

iphone - 翻转 View iPhone

objective-c - 具有主从 Controller 的模态视图 Controller 大小

objective-c - 关闭键盘和按钮

iphone:应用内购买错误

iphone - 保留、分配、属性...让您的 Obj-c 生活更轻松的主题!

ios - 快速选项卡栏尝试在某些页面上显示登录 View Controller

objective-c - objective-c :如果我使用前向GeoCoding(Google API),可以为我的应用程序收取费用吗?

objective-c - 在 dealloc 中释放实例变量的正确方法,Objective C

objective-c - 带有 ModalPresentationStyle 的 Popover 在 iOS 7 iPad 中不居中

ios - 为什么创建非 Controller 文件时默认没有@interface?