存储持久数组的好方法是什么?

时间:2014-01-10 16:49:37

标签: ios objective-c

我有一个NSMutableArray个对象,我想在用户会话之间保留。每个对象都有一个NSInteger属性,我希望能够使用该属性访问所有对象进行计算(平均值,分钟数,最大值等)

将该数组存储到Core Data数据库中或将我的对象单独存储到数据库中会更好吗?

编辑:数组应该不超过1,000个项目。

3 个答案:

答案 0 :(得分:1)

取决于尺寸。如果它很简单,只需将数组存档到文件

已编辑添加

如果你想坚持的只是一个阵列,你不需要使用归档方法,你可以直接进行。

假设您在应用的文档目录中有一个名为persistentURL的文件网址,您希望用它来保存和读取您的数组。

持久保存数组所需要做的就是:

[yourArray writeToURL:persistentURL atomically:YES];

当你想将数据读回数组时,它就像:

一样简单
yourArray = [NSArray arrayWithContentsOfURL:persistentURL];

你可以在这里使用这个方法因为数组只包含NSNumbers属性列表对象(即可以直接放入plist的对象)。

答案 1 :(得分:0)

NSArray和NSMutableArray不能直接包含整数。它必须包含NSNumber对象。

无论如何,我只是使用NSCoding。尝试使用方法archiveRootObject:toFile :(直接写入文件)或archivedDataWithRootObject(将内容转换为NSData中的字节流)。

对于< = 1000项,它应该足够快。

如果您正在阅读和编写足够的数组,您可能需要考虑使用malloc'ed C数组“long”,并将其作为字节保存到文件中。这样会更快,您可以轻松地读取/写入C数组的值,而不必进行对象替换。另一方面,调整数组大小或插入值是C数组的一个难点,如果要在设备之间传输这些数据,还必须注意数据大小和字节顺序问题。

编辑:我刚刚写了一个小测试,并用一个带有archiveRootObject:toFile的文件写了一个1000 NSNumbers的NSArray:在旧的iPhone 4上大约需要0.0038秒才能进行测试。这是支持iOS 7的最慢的机器,写入1,000个项目的时间是3.8秒。因此,编写10,000个项目的数组应该需要3.8个百分之一秒或更少。

除非您在循环中每秒多次读取和写入此数组,否则使用archiveRootObject:toFile:足够快。

答案 2 :(得分:-1)

就个人而言,我会使用以下内容来存储该数组:

[[NSUserDefaults standardUserDefaults] setObject:myArray ForKey:@"myArray"]

并在应用中的任意位置检索它:

NSMutableArray *myArray = [[[NSUserDefaults standardUserDefaults] objectForKey:@"myArray"] mutableCopy];

在我看来,这是保存数据的最简单方法。您可以将可变数组存储在NSUser默认值中,并且我相信您在以后检索它时需要创建它的可变副本,以便能够继续对其进行更改。