【问题标题】:What is NSCache?什么是 NSCache?
【发布时间】:2011-09-20 17:07:52
【问题描述】:

谁能简要解释一下我什么时候需要使用 NSCache?我阅读了文档,但我不明白。比如,给我一个 NSCache 有用的场景示例? 谢谢。

【问题讨论】:

  • 你为什么要问?你想用它做什么?是什么让你调查它?简而言之,您要解决的问题是什么?
  • 正在浏览文档中的类列表并遇到了它。觉得很有趣……没有什么特别的原因。

标签: objective-c ios cocoa-touch cocoa macos


【解决方案1】:

它或多或少就像一本字典,还有以下附加内容(如文档所述):

NSCache 类包含各种自动删除策略,其中 确保它不会使用太多 系统的内存。系统 自动执行这些 其他需要内存时的策略 应用程序。调用时,这些 政策从 缓存,最小化其内存 足迹。

您可以从不同的缓存中添加、删除和查询项目 线程而不必锁定 缓存自己。

从 NSCache 对象中检索某些内容会返回一个自动释放的 结果。

与 NSMutableDictionary 对象不同,缓存不会复制键 放入其中的对象。

如果您的应用程序需要处理大量数据,您可能会使用它,但您不能将它们全部保存在内存中。例如,如果您的应用程序从 SQL Lite 数据库或 Web 服务中提取数据,您可能会在查找后将其存储在 NSCache 中。然后,当你再次需要它时,你可以先检查缓存,如果它不在缓存中,则只需要命中数据库。在这种情况下,使用常规字典的主要优势在于,如果您在缓存中放入了太多内容并且它开始填满内存,它会自动丢弃内容以释放内存。

【讨论】:

  • 这很有趣,它不会复制密钥,我认为这意味着密钥在设置后可能会发生变化,这有一个奇怪的含义,即比较密钥地址或哈希值。大概还是散列。我必须考虑在哪里可以使用它。除了使用不符合 NSCopying 的密钥。
  • 有趣的是,我曾经从本地 sql 数据库中检索 27k 条目,现在使用 NSCache 只需不到一秒而不是整整 5 秒。谢谢大佬
  • @Eugene 丢弃的对象是否可检索?我不知道如何自己检查,因为我不知道如何创建需要内存并且 NSCache 开始丢弃对象的场景。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-10
  • 2018-07-23
  • 1970-01-01
  • 2013-10-20
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多