【问题标题】:How to use NSCache appropriately in iOS application?如何在 iOS 应用程序中正确使用 NSCache?
【发布时间】:2017-06-17 21:23:28
【问题描述】:

我正在构建一个应用程序并希望使用NSCache 来存储数据以进行缓存。

大约有 5 个 API 我需要缓存数据。我应该使用 NSCache 吗?我对 NSCache 进行了研究,但对此我有一些疑问。

我确实浏览了下面的链接。

https://developer.apple.com/library/content/documentation/Performance/Conceptual/ManagingMemory/Articles/CachingandPurgeableMemory.html

我在那里发现了一些有趣的东西。

NSCache 提供了另外两个有用的“限制”特性:限制缓存元素的数量和限制缓存中所有元素的总成本。要限制缓存允许拥有的元素数量,请调用方法 setCountLimit:。例如,如果您尝试向 countLimit 设置为 10 的缓存添加 11 个项目,缓存可能会自动丢弃其中一个元素。

如果我们将限制设置为 10,并且如果我们尝试添加第 11 个项目,那么它将丢弃第 1 个或第 10 个特定项目?也可以是随机物品。

如果我想为所有 API 存储 5 个不同的 NSCache 对象,我该怎么做呢? 我应该制作 5 个不同的 NSCache 对象还是应该在单个 NSCache 对象中存储 5 个不同的字典?

请告诉我最好的处理方法。

【问题讨论】:

  • 你想在缓存中存储什么?只要它们是一次性对象,您可以在必要时从网络重新加载,那么NSCache 很可能适合您的特定情况。
  • 我要做一个约会应用程序。我需要为此存储配置文件。在这种情况下我应该使用 NSCache 吗?
  • 我认为你不应该这样做。如果您打算存储配置文件,最好设置某种 CoreData 模式,您可以在其中存储配置文件以供以后检索。例如,您可能希望将 NSCache 用于诸如用户的个人资料图片(图像)之类的东西,但可能不想自己存储整个个人资料。依靠缓存保存配置文件结果时,您严重限制了离线应用的使用潜力。
  • 在配置文件中大约有 12 个属性。可能会有数千个可用的配置文件。如果我们存储在核心数据中,那么这也不是一个好习惯,不是吗?那么最好的配置文件是什么。
  • 为什么将这些信息存储在 CoreData 中不是一个好习惯?将它存储在 CoreData 中可能不是一个好习惯

标签: ios swift xcode caching nscache


【解决方案1】:

NSCache 基本上作为NSMutableDictionary 工作,主要区别在于即使是可变的也是线程安全的(通常可变的 NSFoundation 对象不是线程安全的)。因此,您可以使用键获取和设置对象。
是的,文档不清楚,但我记得(这很有意义)你应该总是检测一个对象是否被缓存,如果没有从你的主要来源重新加载它或管理那个特殊情况。因此,删除哪个对象并不是很重要,只需确保某个对象在某个时候不再存在并且您正在管理这种情况。
我通常会根据不同的上下文创建不同的缓存,但大多数时候一个就足够了。
我有几个建议:

  • 您的答案被标记为 Swift,因此请注意 NSCache(在 swift 2 中,在 3 中不知道)仅适用于对象,而不适用于结构或枚举(值类型,除非可以桥接)。李>
  • 记住http协议有自己的缓存系统和通信,不要重复造轮子

【讨论】:

  • 请指导我如何在swift 3中缓存json对象以进行离线存储
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 2021-04-14
  • 2011-08-10
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多