我正在处理的项目存储了一些像这样的常量字符串:
(.h)中
extern NSURL *kURLLocationComputer;
我需要按如下方式初始化它们:
(.mm)
NSURL *kURLLocationComputer;
... {
kURLLocationComputer = [[NSURL alloc] initWithString:@"computer:///"];
... }
问题是它们在项目的许多不同地方使用,需要先进行初始化。但由于某些初始化很复杂(不是常数),因此不能内联完成。
我应该如何确保在使用它们之前对它们进行初始化?我在考虑添加一个虚拟类并在+load
中初始化变量,但我认为不允许这样做假设Cocoa库类在那一点上起作用。
答案 0 :(得分:2)
经过一些研究后发现,在为所有类调用__attribute__((constructor))
之后,保证会调用 +load
函数。来自+load
上的NSObject文档:
load
消息被发送到动态加载和静态链接的类和类别,但前提是新加载的类或类别实现了可以响应的方法。初始化顺序如下:
- 您链接到的任何框架中的所有初始值设定项。
- 图片中的所有
+load
种方法。- 图像中的所有C ++静态初始值设定项和C / C ++
__attribute__(constructor)
都起作用。- 链接到您的框架中的所有初始值设定项。
醇>
答案 1 :(得分:0)
为什么不选择单件类/共享实例。
它可以作为全局变量使用。