我需要一个字符串 - >字符串映射在运行时使用(想象NSDictionary
),除了映射在构建时间之后永远不会改变。
天真的解决方案是使用NSDictionary
,但必须有更优化的方法来做到这一点,不是吗?
在某种意义上说,如果映射在编译时是已知的,并且已知永远不会改变,那么编译器应该能够在编译时进行映射。 NSDictionary需要在运行时进行哈希查找。我知道这是不变的时间,但它对我来说感觉有点“不干净”......
答案 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]
,在这种情况下,您通常不希望多次运行它。