iOS上的NSURLConnection不会尝试缓存大于50KB的对象。

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

还有其他人注意到这些问题吗?还是我漏了什么?

提醒一下,我在模拟器和iPad 2上运行iOS 4.3。

4个回答

3

1
ASIHTTP已不再受支持。 - Kunal Balani

2

我不确定对于UIWebView是如何工作的,但当你使用NSURLRequest时,文件的最大大小取决于你如何初始化URLCache(initWithMemoryCapacity:(NSUInteger)memoryCapacity ...)


1
我建议使用 three20 库和 TTURLRequest。这个库似乎对于大数据大小有很好的缓存,因为它被用于 Facebook,并且特别是图片。
TTURLRequest 几乎可以直接替换 NSURLRequest,所以应该很容易进行迁移,而且不依赖于 Three20 的其他部分。

0

链接已过期。 - Kunal Balani
是的,已经过了几年,显然这不再得到维护。 - steipete

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接