除了sqlite3、CoreData和NSUserDefaults之外,iPhone操作系统中最容易处理的数据持久化技术是什么?

除了sqlite3、CoreData和NSUserDefaults之外,iPhone操作系统中最容易处理的数据持久化技术是什么?,iphone,persistence,Iphone,Persistence,我认为sqlite3在复杂性方面有点过分了。我有一个非常小的应用程序,从用户那里获取非常小的输入。输入为浮点值、日期和整数。我想说,即使是一个铁杆用户也不会用该应用程序生成超过10KB的数据 用一个计算器例子可以很好地描述对象图。想象一个计算器,它存储所有的计算结果。没什么特别的。对象图如下所示:存储MyCalculationData对象实例的NSMutableArray。每个MyCalculationData对象只存储最简单的内容:所使用的数学运算(由编程映射到某物的整数标识,即“减号”或“除

我认为sqlite3在复杂性方面有点过分了。我有一个非常小的应用程序,从用户那里获取非常小的输入。输入为浮点值、日期和整数。我想说,即使是一个铁杆用户也不会用该应用程序生成超过10KB的数据

用一个计算器例子可以很好地描述对象图。想象一个计算器,它存储所有的计算结果。没什么特别的。对象图如下所示:存储MyCalculationData对象实例的NSMutableArray。每个MyCalculationData对象只存储最简单的内容:所使用的数学运算(由编程映射到某物的整数标识,即“减号”或“除法”)、输入的CGFloat值、时间戳(我认为只是一个大的双精度)

最后,整个NSMutableArray表示与该计算器的一个会话,用户可以随时重新打开它。它存储在另一个NSMutableArray中,该数组保存所有这些计算会话

理论上,这与我的应用程序的功能类似

那么有哪些选择?

sqlite3:太难了,无法有效使用。真正地这很难,就像试着吃一个20周前的面包

sqlite3+FMDB:听起来确实不错。有一个objective-c包装类来摆脱所有这些c>>objective-c>>c转换和限制。但是:没有找到任何文档。没有找到任何例子。没有教程。使用不多/讨论不多

CoreData:也许一年后,但不是现在。不要相信统计数字。不会这么快升级到3.0


有人对这些NSFoobar序列化有很好的经验吗?

看看NSKeyedArchiver/Unarchiver。只要阵列中的所有内容都符合NSCoding协议(NSStrings和NSNumbers已经这样做了),您就可以像这样将阵列保存到磁盘:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[data writeToFile:@"/a/path/to/myFile" atomically:YES];
NSData *data = [NSData dataWithContentsOfFile:@"/a/path/to/myFile"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
您可以按如下方式将其加载回:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[data writeToFile:@"/a/path/to/myFile" atomically:YES];
NSData *data = [NSData dataWithContentsOfFile:@"/a/path/to/myFile"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

对于像您这样的简单应用程序,此方法简单易行。

请查看NSKeyedArchiver/Unarchiver。只要阵列中的所有内容都符合NSCoding协议(NSStrings和NSNumbers已经这样做了),您就可以像这样将阵列保存到磁盘:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[data writeToFile:@"/a/path/to/myFile" atomically:YES];
NSData *data = [NSData dataWithContentsOfFile:@"/a/path/to/myFile"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];
您可以按如下方式将其加载回:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[data writeToFile:@"/a/path/to/myFile" atomically:YES];
NSData *data = [NSData dataWithContentsOfFile:@"/a/path/to/myFile"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

此方法对于像您这样的简单应用程序来说非常简单。

您可以使用NSUserPreferences,而不是问一些非常类似的问题:?@Surya它在iOS上不存在,至少不公开。在苹果公司,您目前只有UserDefaults、NSKeyedArchiver、CoreData和FileManagerSqlite、MySQL、Realm等都是第三方。你可以使用nsuserpreferencesDidn,你不需要问一些非常类似的问题吗?@Surya它在iOS上不存在,至少不公开。在苹果公司,你目前只有UserDefaults、NSKeyedArchiver、CoreData和FileManagerSqlite、MySQL、Realm等都是第三方。