NSURLConnection是否利用了NSURLCache?

jas*_*ord 11 iphone nsurlconnection nsurlrequest

我正在试图弄清楚如何使用URL加载框架来加载利用缓存的URL.

我正在使用NSURLConnections并为它们提供NSURLRequests.我甚至在那些对NSURLRequestReturnCacheDataElseLoad的请求上设置了cachePolicy.我第一次加载请求时,它会自动放入缓存中([NSURLCache sharedCache]有它).但是下次加载相同的请求时,NSURLConnection似乎忽略了缓存中的内容并重新加载数据.

我应该手动实现缓存查找并返回缓存数据吗?NSURLConnection不这样做吗?或者有没有办法让框架无缝地使用缓存?

更新:尝试以下但没有成功:

  • 将请求缓存策略设置为NSURLRequestReturnCacheDataElseLoad而不是NSURLRequestUseProtocolCachePolicy
  • 重新使用请求对象而不是创建新对象
  • 使用+[NSURLConnection sendSynchronousRequest:returningResponse:error:]而不是异步加载

mxc*_*xcl 6

注意的iOS 5日起提供具有sharedURLCache两个内存和磁盘容量.

除非您将NSURLCache设置为具有某些容量,否则不会缓存任何内容:

// A 10MB cache. This a good avatar-image-cache size but might be too 
// large for your app's memory requirements. YMMV.
[[NSURLCache sharedURLCache] setMemoryCapacity:1024*1024*10];
Run Code Online (Sandbox Code Playgroud)

默认的iPhone NSURLCache实例拒绝永久缓存到磁盘.如果您需要此行为,则必须对NSURLCache进行子类化并实现自己的磁盘缓存.我在GitHub上找到了很多磁盘缓存的例子,尽管它们都没有完全必要的"修剪"步骤令人满意地恕我直言.


Nic*_*ore 0

它确实会自动使用 NSURLCache,至少在某些情况下是这样。当然,在下面的代码中是这样的:

编辑 - 适用于 OS X 10.6 Cocoa 应用程序,不适用于 iPhone(误读问题)

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

    // run request with default cache policy
 NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://en.wikipedia.org/"]];
 NSData *data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
 NSLog(@"Received %d bytes", [data length]);

 sleep(10);

    // now run it asking it to use the cache
 [req setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
 data=[NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil];
 NSLog(@"Received %d bytes", [data length]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)