尽管苹果的文档表明不同,但在iOS上,
NSURLCache
根本不进行任何磁盘(闪存)缓存。您可以子类化NSURLCache
以更改提取和存储操作的行为,以使用磁盘(就像SDURLCache
一样),但由于缓存使用和实现的以下严重限制,这并不能像您期望的那样正常工作:
NSURLConnection
在文件大小超过约50KB(>=52428字节)时甚至不调用storeCachedResponse:forRequest:
。这使得我们使用子类化NSURLCache
无意义(200KB的图像),因为它甚至无法到达缓存。因此,我们必须在NSURLConnection
上面的级别手动添加缓存。- 即使手动调用NSURLCache内置的
storeCachedResponse:forRequest:
,如果响应大小超过约180KB,它也只会将响应存储在内存中。我通过手动调用storeCachedResponse并查看数据长度大于约180KB时的before/aftercurrentMemoryUsage
来测试这一点。因此,我们还需要编写自己的LRU内存缓存。
还有其他人注意到这些问题吗?还是我漏了什么?
提醒一下,我在模拟器和iPad 2上运行iOS 4.3。