0

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

extern NSURL *kURLLocationComputer;

我需要将它们初始化如下:(.
mm)

NSURL *kURLLocationComputer;

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

问题是它们在项目的许多不同的地方被使用,并且它们需要首先被初始化。但是由于一些初始化很复杂(不是恒定的),它们不能内联完成。

我应该如何确保它们在使用前被初始化?我正在考虑添加一个虚拟类并初始化 中的变量+load,但我认为不允许有人假设 Cocoa 库类在那时正在工作。

4

2 回答 2

2

经过一些研究,事实证明,__attribute__((constructor))函数保证在+load所有类调用后被调用。从 NSObject 文档中+load

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

初始化顺序如下:

  1. 您链接到的任何框架中的所有初始化程序。
  2. 图像中的所有+load方法。
  3. 映像中的所有 C++ 静态初始化程序和 C/C++__attribute__(constructor)函数。
  4. 链接到您的框架中的所有初始化程序。
于 2013-01-04T07:18:30.203 回答
0

你为什么不去单例类/共享实例。

这可以在整个过程中用作全局变量。

于 2013-01-04T06:53:22.610 回答