尽管 Apple 的文档另有说明,NSURLCache
但在 iOS 上根本不做任何磁盘(闪存)缓存。您可以子类NSURLCache
化以更改 fetch 和 store 操作的行为以使用磁盘(就像这样SDURLCache
做),但是由于以下对缓存的使用和实现方式的严重限制,这不会像您期望的那样工作:
NSURLConnection
甚至不需要storeCachedResponse:forRequest:
超过大约 50KB 的文件(确切地说,>= 52428 字节)。这使得子类NSURLCache
化对我们的使用毫无意义(200KB 图像),因为它甚至不会进入缓存。因此,我们必须在上一级手动添加缓存NSURLConnection
。- 即使手动调用 NSURLCache 的内置函数
storeCachedResponse:forRequest:
,它也只会在小于 180KB 的情况下将响应存储在内存中。我通过手动调用 storeCachedResponse 对此进行了测试,发现之前/之后currentMemoryUsage
对于超过 180KB 的数据长度没有改变。所以我们也必须编写自己的 LRU 内存缓存。
有没有其他人注意到这些问题?还是我缺少什么?
仅供参考,我在模拟器和 iPad 2 上运行 iOS 4.3。