iOS上的Objective C数据缓存

18

我正在从一个API中获取数据,然后用它来构建我的数据对象。我希望将这些数据缓存起来以备将来使用。目前我是将来自API的字符串存储在NSUserDefaults中,并在每次应用程序加载时重新解析它。虽然这种方法可行,但似乎不是最好的方式。

有什么更好的方法吗?

6个回答

15

你是否注意到了 NSCache

NSCache 对象是一种可变集合,它存储键值对,类似于 NSDictionary 对象。 NSCache 类提供了编程接口来添加和删除对象,并基于缓存中的对象的总成本和数量设置逐出策略...


这是10.6和iOS 4.0的新功能,因此不一定可用(至少目前如此,苹果仍然接受部署目标低至3.1的应用程序提交)。但基于市场份额和缺失的功能(例如NSCache),我认为为3.1开发新应用程序并不是一个明智的决定。 - Tommy
9
据我理解,这种情况下所需的是持久缓存NSCache是内存缓存,基本上是一个NSDictionary,可以在低内存条件下丢弃缓存数据。 - Palimondo

11

个人而言,我非常喜欢EGOCache类,在我的项目中经常使用:

https://github.com/enormego/EGOCache

这些类很容易使用。我曾经有自己的类也有类似的设计,但是这些类更加完善,所以我决定坚持使用它们(不想重新发明轮子)。


10

解决这个问题的方案有很多种,没有一种“正确”的方法。以下是几种流行的选择:

  • Core Data - 苹果公司的持久性框架。非常高效,但较为困难。
  • SQLite - 快速而灵活,但基本功能。
  • Plists - 基本上就是将文件写入磁盘,必须手动读写。
  • NSUserDefaults - 最轻量级的“键值”选项。

我鼓励你阅读所有四种方案,并看看哪种最适合你。


我也想把Realm添加到你的列表中。 - tskulbru

5

0
什么类型的数据?如果是文本/字符串类型的话,SQLLite可能是最好的选择。

0
我会将计算/解析后的数据存储在Core Data存储中,或者存储在应用程序文档目录中的NSData平面文件中。你是正确的,将其存储在NSUserDefaults中,然后重新解析似乎有点过度。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接