【问题标题】:Managing iPhone app sandbox tmp directory size for caching images管理用于缓存图像的 iPhone 应用沙箱 tmp 目录大小
【发布时间】:2011-04-14 06:18:44
【问题描述】:

我有一个图像密集型 iPhone 应用程序,我希望将远程下载的图像存储在本地应用程序的沙箱 tmp 目录中,以避免不必要的网络请求。存储在应用程序目录中的文件的总大小是否有限制,或者应用程序是否需要管理它?应用如何确定 tmp 目录中文件的大小?

另外,如果应用需要管理缓存的大小,我想实施某种缓存策略来确定哪些文件无效。我该怎么做呢?如果我想实现一个基本的 LRU 缓存策略 - 使最近最少使用的文件无效 - 似乎我需要存储每个图像的访问计数并将其存储在磁盘上,这似乎有点时髦。我想一个简单的大小管理策略是在每次应用程序终止时简单地完全擦除缓存。

另外,使用 NSCachesDirectory 和 NSTemporaryDirectory 中的目录有什么区别? Apple docs 提到了两者,但没有谈论将哪一个用于什么类型的文件。我认为 NSTemporaryDirectory 更像是一个 Unix /var/tmp 目录,用于存储可以随时清除的临时数据。在我看来,NSCachesDirectory 更适合存储缓存的图像,因为在多个应用生命周期中可能需要这些文件。

【问题讨论】:

  • NSURLCache 不符合要求有什么原因吗?我自己正在处理图像缓存问题,并且想了解 NSURLCache 作为不需要完整的自定义 LRU 或 LRU-ish 数据存储的解决方案有多么有用

标签: iphone image caching sandbox


【解决方案1】:

所有临时目录都是您的应用程序的本地目录;它们中的任何一个都可以工作,并且对其内容的大小没有人为的限制。

持久的 LRU 缓存策略应该足够且相对容易实现。

【讨论】:

  • 这就是我要做的。对于那些好奇的人——我还利用每个文件的 NSFileModificationDate 属性来强制执行 LRU 缓存。
  • NSFileModificationDate 跟踪文件的修改时间,而不是上次使用的时间。通常人们会使用statst_atime 字段来检查文件的最后访问时间,但iPhone 使用noatime 参数集安装用户分区,因此没有内置方法来跟踪此信息。滚动你自己的:)
猜你喜欢
  • 2012-08-09
  • 2011-10-16
  • 2010-11-12
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多