2010-09-19 52 views
4

我有一个相当图像密集型iPhone应用程序,我正在寻找远程下载的图像本地存储在应用程序的沙箱tmp目录,以避免不必要的网络请求。存储在应用程序目录中的文件的总大小是否有限制,还是应用程序需要管理这些限制?应用程序将如何确定tmp目录中文件的大小?另外,如果应用程序需要管理缓存的大小,我想实现某种缓存策略来确定哪些文件会失效。我会如何去做这件事?如果我想实现一个基本的LRU缓存策略 - 使最近使用最少的文件失效 - 看起来我需要为每个映像存储访问计数并将其存储在磁盘上,这看起来有点时髦。我想一个简单的大小管理策略就是在应用程序每次终止时简单地完全擦除缓存。管理iPhone应用程序沙箱tmp目录大小缓存图像

另外,使用NSCachesDirectory与NSTemporaryDirectory的目录有什么区别? Apple文档提到了这两种文件,但不要谈论使用哪种类型的文件。我在想,NSTemporaryDirectory更像是一个Unix/var/tmp目录,并用于可以随时清除的短暂数据。在我看来,NSCachesDirectory更适合于存储缓存的图像,因为跨多个应用程序生命周期可能需要这些文件。

+0

NSURLCache不符合法案是否有原因?我正在处理图像缓存问题,并希望了解NSURLCache作为一种不需要完整定制LRU或LRU-ish数据存储的解决方案的有用之处 – Yetanotherjosh 2010-12-21 04:17:18

回答

2

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

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

+0

这就是我要做的。对于那些很好奇的人,我还利用每个文件的NSFileModificationDate属性来强制执行LRU缓存。 – pmc255 2010-09-20 04:42:46

+0

NSFileModificationDate追踪文件何时被修改,而不是最后一次使用。通常情况下,人们会使用'stat'和'st_atime'字段来检查文件上次访问的时间,但iPhone使用'noatime'参数设置用户分区,因此没有内置的方式来跟踪这些信息。滚你自己的:) – rpetrich 2010-09-21 03:05:05