当&从任意消息返回值初始化外部变量的位置?

时间:2013-01-04 06:40:48

标签: objective-c cocoa variables initialization extern

我正在处理的项目存储了一些像这样的常量字符串:
(.h)中

extern NSURL *kURLLocationComputer;

我需要按如下方式初始化它们:
(.mm)

NSURL *kURLLocationComputer;

... {
      kURLLocationComputer = [[NSURL alloc] initWithString:@"computer:///"];
... }

问题是它们在项目的许多不同地方使用,需要先进行初始化。但由于某些初始化很复杂(不是常数),因此不能内联完成。

我应该如何确保在使用它们之前对它们进行初始化?我在考虑添加一个虚拟类并在+load中初始化变量,但我认为不允许这样做假设Cocoa库类在那一点上起作用。

2 个答案:

答案 0 :(得分:2)

经过一些研究后发现,在为所有类调用__attribute__((constructor))之后,保证会调用 +load函数。来自+load上的NSObject文档:

  

load消息被发送到动态加载和静态链接的类和类别,但前提是新加载的类或类别实现了可以响应的方法。

     

初始化顺序如下:

     
      
  1. 您链接到的任何框架中的所有初始值设定项。
  2.   
  3. 图片中的所有+load种方法。
  4.   
  5. 图像中的所有C ++静态初始值设定项和C / C ++ __attribute__(constructor)都起作用。
  6.   
  7. 链接到您的框架中的所有初始值设定项。
  8.   

答案 1 :(得分:0)

为什么不选择单件类/共享实例。

它可以作为全局变量使用。