在iphone应用程序中使用查找表而不将其加载到内存的最佳方法

时间:2013-03-22 12:18:02

标签: iphone sqlite core-data nsdictionary

我有一个带有大(6-7MB)keyvalue文件的iphone应用程序,我希望避免加载到内存中。很少使用它,并且嚼掉那么多的RAM似乎是不必要的。

现在它是一个平面文本文件,其格式为

KEY VALUE

但我很乐意将它存储起来,但效果最好。

最佳方法是什么? SQLite是一个选项,但这似乎是一个重量级的解决方案。我被告知coredata是一个很好的SQLite接口,但在我看来,这仍然需要将整个文件作为一个nsdictaionary加载到内存中

3 个答案:

答案 0 :(得分:2)

首先, SQLite不是“重量级”解决方案。它的内存要求非常低,而且性能也很好。如果你使用SQLite,你可能需要一个像FMDB或PLDatabase这样的包装器,以便在Objective-C中使用它。

接下来,核心数据不是SQLite的包装。它在内部使用 SQLite,但这是一个未在Core Data API中公开的实现细节。核心数据可以在这种情况下工作,但如果你用SQL风格的术语来思考它,那么我保证你会搞砸它。

如果您只是很少使用该表,最简单的方法是将其保存为JSON或属性列表,并按需阅读整个内容。只要你在完成时小心卸载它并且你还没有推动内存限制,我就不用担心了。如果你可以更频繁地到达你需要的地方,可以考虑使用SQLite或Core Data--要么你可以查看你需要的值而不将整个内容加载到内存中。

答案 1 :(得分:1)

如何在将所有密钥加载到内存中时如何搜索密钥?

您可以实现自己的索引方案,或者只使用SQLite(由于某些其他应用或服务,其代码可能已经在内存中)。

答案 2 :(得分:0)

六或七MB不大。因此,您可以将其加载到字典中,然后在完成后确保删除/取消链接。或者,您可以编写自己的查询并自己扫描密钥来读取文件行。但6-7 MB并不大。

如果您可以控制文件内容,只需使用现有的Apple框架将其编写为plist,然后将plist作为字典阅读并进行查询。