iOS上的NSURLConnection不会尝试caching大于50KB的对象

尽pipe苹果的文档指出 ,iOS上的NSURLCache根本不做任何磁盘(闪存)caching。 您可以NSURLCache子类,以更改获取和存储操作的行为来使用磁盘(就像SDURLCache一样),但是由于以下严重的caching使用和实现限制, d期望:

  • NSURLConnection甚至不会调用storeCachedResponse:forRequest:对于超过大约50KB( storeCachedResponse:forRequest:storeCachedResponse:forRequest: 52428字节)的文件。 这使得NSURLCache我们的使用(200KB图像)毫无意义,因为它甚至不会进入caching。 因此,我们必须手动添加高于NSURLConnection的级别的caching。
  • 即使手动调用NSURLCache的内置storeCachedResponse:forRequest:如果响应小于180KB,它只会将响应存储在内存中。 我通过手动调用storeCachedResponse来testing这个,并且看到currentMemoryUsage之前/之后的数据长度在大约180KB以上没有改变。 所以我们也必须编写自己的LRU内存caching。

有没有人注意到这些问题? 还是有什么我失踪?

仅供参考,我在模拟器和iPad 2上运行iOS 4.3。

我build议使用ASIHTTPRequest库而不是NSURLRequest:

http://allseeing-i.com/ASIHTTPRequest/How-to-use

它有一个健壮的cachingAPI:

http://allseeing-i.com/ASIHTTPRequest/How-to-use#using_a_download_cache

我不确定它是如何工作的一个UIWebvieuw,但是当你使用NSURLRequest文件的最大尺寸取决于你如何初始化URLCache(initWithMemoryCapacity:(NSUInteger)memoryCapacity …)

我build议使用three20库和TTURLRequest。 这似乎有很好的caching大数据量,因为它用于Facebook,特别是图片。

TTURLRequest几乎是一个NSURLRequest的替代品,所以应该很容易移动,并且没有太多的依赖Three20的其余部分

看看我的AFNetworking的fork包含一个支持磁盘保存的NSURLCache自定义类: https : //github.com/steipete/AFNetworking/tree/disk-cache