Iphone 在Cocoa touch中存储静态引用数组/dict的最佳方法

Iphone 在Cocoa touch中存储静态引用数组/dict的最佳方法,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我想在iPhone应用程序中存储几个数组或dict数组。此列表是静态的,不会被应用程序或用户修改。有时,它们可能会被显示,但更可能的是,它们会被迭代,并与一些输入值进行比较。存储这些数组的最佳方法是在头文件中存储CoreData/SQLite数据,还是我没有想到的?我可以看到创建一个只存储了这些数组以供访问的类,但我不确定这是否是最好的方法。使用属性列表文件。使用NSDictionary+dictionaryWithContentsofFile:.加载它。根据您希望修改或本地化项目的频率以及查找

我想在iPhone应用程序中存储几个数组或dict数组。此列表是静态的,不会被应用程序或用户修改。有时,它们可能会被显示,但更可能的是,它们会被迭代,并与一些输入值进行比较。存储这些数组的最佳方法是在头文件中存储CoreData/SQLite数据,还是我没有想到的?我可以看到创建一个只存储了这些数组以供访问的类,但我不确定这是否是最好的方法。

使用属性列表文件。使用NSDictionary+dictionaryWithContentsofFile:.加载它。

根据您希望修改或本地化项目的频率以及查找时间要求,静态数组也可能是一种方法。但是,对于常量数据,除非您有复杂的查询需求(而不仅仅是索引),否则SQLite可能不是您要采用的方法。

我将执行以下操作:

@implementation DataSource
+ (NSArray *)someData
{
  static NSArray *data = nil;
  if (!data) {
    data = [[NSArray arrayWithObjects:..., nil] retain];
  }
  return data;
}
@end

额外的数组或dict数组将作为类方法添加到该类中。

我会选择plist方法。

虽然我在Mac上同意你的观点,但在iPhone上我不同意。如果只是静态的,那么执行IO基本上是浪费时间。如果数据集太大而无法放入内存,那么它应该在SQLite中,但OP没有提到数据集特别大的任何内容。IO是IO。。。如果你将其编译到你的应用程序中,你将执行IO,它将被分割到你的应用程序文本部分,并由文件寻呼机按需加载。如果你把它放在一个文件中,你可以控制位置,如果你的数据是应用程序文本,你对它的控制就更少了。