【问题标题】:How to periodically clear NSCache in swift?如何定期快速清除 NSCache?
【发布时间】:2016-09-16 05:41:57
【问题描述】:

我很难在这里想出一个好的解决方案。因此,在我的应用程序中,我有一个加载用户数据的 UITableView,并且每个单元格都有一个个人资料图像 UIImageView。因此,每次循环遍历单元格时,它都会为每个用户单独下载个人资料图片。出于这个原因,我开始使用 NSCache 来存储个人资料图片。这非常有效,现在滞后消失了。

但是,如果有人更改了他们的个人资料图片怎么办?个人资料图片上传到后端每个用户一张。我使用用户 ID 来引用这些个人资料图片。如果有人更改了他们的个人资料图片,它只会加载我在缓存中的图像,而不是他们的新图像。因此,我希望每 3 小时左右清除一次 IOS 设备上的整个缓存。那将治愈一切。你如何每隔一段时间清除整个 NSCache?

TL;DR:
如何按时间间隔清除应用程序的整个 NSCache? (例如:每 3 小时清除一次应用缓存)

【问题讨论】:

  • 我认为更改您的后端图像 id 比清除应用程序中的缓存更有效,如果您清除,那么其他用户数据也会被清除,并且不会有太多用户使用该应用程序 3连续几个小时
  • @Tj3n 我只是在缓存个人资料图片!所有其他信息都是实时下载的
  • 我知道你只缓存个人资料图片并每次都获取新数据,这就是为什么我说更改图像ID更好,因为你不需要清除缓存并且仍然知道要下载的新图像ID它改变了

标签: ios swift caching


【解决方案1】:

您可以使用应用程序委托方法并在每次用户进入应用程序的前台时执行检查。您可以保留一个变量来保存用户上次打开应用程序的时间,如果当前时间超过了 3 小时,则清除缓存。

如 cmets 所述,大多数用户不会有 3 小时的会话。

附带说明:大多数用户可能理解图像不会立即更新,例如,我知道 twitter 需要一段时间才能更新。在我的应用程序中,我不理会缓存,并在应用程序完全退出时重新下载所有图像。如果您在将图像放在服务器上之前对其进行压缩,这不会对数据使用造成严重影响。

【讨论】:

  • 迄今为止最好的答案。我实际上是在压缩图像,所以是的,这实际上不是问题。我现在实际上对您的“旁注”感到好奇。那么,我会用什么方法呢? didEnterBackground 还是 willEnterForeground?
  • @JohnLeonardo 所以作为旁注,我只是让他们随着应用程序的消亡而消亡。幸运的是,这只是因为我的 NSCache (我怀疑你的)只是一个变量,这意味着当应用程序被强制退出时,即用户双击主页按钮并向上滑动,该变量会在下次您返回其初始声明时启动应用程序。
  • @JohnLeonardo 如果您想具体说明何时删除缓存,即每 3 小时一次,那是我将使用应用程序委托的时间。我可能会使用 applicationWillEnterForeground 方法如果我的答案对你有用,请选择作为接受的答案:) 谢谢。
  • 老兄,非常感谢。哈哈,是的,我的 NSCache 也是一个变量,而且我从不知道它不是持久的(我真傻),所以保持原样可能没问题。选择这个答案!
猜你喜欢
  • 2018-01-24
  • 1970-01-01
  • 2015-11-23
  • 2015-08-12
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
相关资源
最近更新 更多