我有一个带有大(6-7MB)键值文件的 iphone 应用程序,我想避免加载到内存中。它很少使用,而且似乎没有必要消耗这么多的 RAM。
现在它是一个平面文本文件,格式为
KEY VALUE
但我很乐意存储它,但效果最好。
最好的方法是什么?SQLite 是一种选择,但这似乎是一个重量级的解决方案。有人告诉我 coredata 是 SQLite 的一个很好的接口,但在我看来,这仍然需要将整个文件作为 nsdictaionary 加载到内存中
我有一个带有大(6-7MB)键值文件的 iphone 应用程序,我想避免加载到内存中。它很少使用,而且似乎没有必要消耗这么多的 RAM。
现在它是一个平面文本文件,格式为
KEY VALUE
但我很乐意存储它,但效果最好。
最好的方法是什么?SQLite 是一种选择,但这似乎是一个重量级的解决方案。有人告诉我 coredata 是 SQLite 的一个很好的接口,但在我看来,这仍然需要将整个文件作为 nsdictaionary 加载到内存中
首先,SQLite 不是一个“重量级”的解决方案。它的内存要求很低,而且性能很好。如果您使用 SQLite,您可能需要像 FMDB 或 PLDatabase 这样的包装器,以使其更易于在 Objective-C 中使用。
其次,Core Data 不是 SQLite 的包装器。它在内部使用SQLite,但这是一个未在 Core Data API 中公开的实现细节。Core Data 可以在这种情况下工作,但如果你用 SQL 风格的术语来考虑它,那么我保证你会搞砸的。
如果您很少使用该表,最简单的方法是将其保存为 JSON 或属性列表,然后按需读取整个内容。只要您在完成后小心卸载它并且您还没有推动内存限制,我就不会担心它。如果您可能会更频繁地到达需要它的地方,请考虑使用 SQLite 或 Core Data——这两种方法都可以让您查找所需的值,而无需将整个内容加载到内存中。
如果没有将所有密钥加载到内存中,您将如何搜索密钥?
您可以实现自己的索引方案,或者只使用 SQLite(由于其他一些应用程序或服务,其代码可能已经在内存中)。
六七 MB 并不大。因此,您可以将其加载到字典中,然后在完成时确保将其删除/取消链接。或者,您可以编写自己的查询并自己读取文件行来扫描密钥。但是 6-7 MB 并不大。
如果您可以控制文件内容,只需使用现有的 Apple 框架将其编写为 a plist
,然后将其plist
作为字典读取并进行查询。