静态字符串 - >字符串映射

时间:2012-03-29 16:41:28

标签: objective-c cocoa-touch cocoa mapping

我需要一个字符串 - >字符串映射在运行时使用(想象NSDictionary),除了映射在构建时间之后永远不会改变。

天真的解决方案是使用NSDictionary,但必须有更优化的方法来做到这一点,不是吗?

在某种意义上说,如果映射在编译时是已知的,并且已知永远不会改变,那么编译器应该能够在编译时进行映射。 NSDictionary需要在运行时进行哈希查找。我知道这是不变的时间,但它对我来说感觉有点“不干净”......

2 个答案:

答案 0 :(得分:3)

你可以对你的NSDictionary进行硬编码,如果这不是太麻烦(即它不是很大),或者你可以创建一个plist并将其包含在你的app包中。然后在app启动时,从plist中读取字典(几行代码)。这些方法中的每一种都是大致相同的努力。使用plist的优点是,如果你必须改变它,你正在编辑plist,而不是代码。

答案 1 :(得分:1)

静态NSDictionary是正确的工具。您通常使用+initialize方法初始化它们:

static NSDictionary *kDictionary;

+ (void)initialize {
  if (self == [MYClass class]) {
    kDictionary = [[NSDictionary alloc] initWith...];
  }
}

initialize每个类调用一次,具有线程安全性,紧接在该类上调用第一个请求的方法之前(通常第一个方法是+alloc)。 self测试是因为子类会自动调用它们的[super initialize],在这种情况下,您通常不希望多次运行它。