如何禁用AFNetworkingcaching

是否可以禁用AFNetworking的所有cachingfunction?

我正在构build自己的自定义caching系统,不希望它占用磁盘空间。

谢谢,阿什利

caching由NSURLCache应用程序范围内处理。 如果您不设置共享caching,请求不会被caching。 即使使用共享的NSURLCache ,iOS上的默认实现也不支持磁盘caching。

这就是说,除非你有一个非常特别的理由来编写自己的caching系统,否则我会强烈build议不要这样做。 对于99.9%的应用程序来说, NSURLCache已经足够了:它处理来自传入响应的caching指令,并在新的请求中正确使用caching指令,并且在应用程序中不会成为性能瓶颈。 作为一个自己浪费了不less时间的人( 后来把它扔掉了,因为这是完全没有必要的 ),我可以说有更好的地方来关注你的发展。

最初我发现杰森·摩尔的工作的答案,但是最近我注意到我的应用程序仍然caching请求。 我没有使用最新的AFNetworking,所以我不知道caching是否已经在更新的版本中解决。

苹果的URLCache项目有这样的说法:

默认情况下,Cocoa URL加载系统使用一个小的共享内存caching。 我们不需要这个caching,所以当应用程序启动时我们将其设置为零。

然后这样做来禁用caching。

 NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0 diskCapacity:0 diskPath:nil]; [NSURLCache setSharedURLCache:sharedCache]; [sharedCache release]; 

这将禁用整个应用程序的所有caching,这在某些情况下可能并不理想,但由于NSURLRequest不遵守所请求的caching策略,因此这是我唯一可以看到的选项。

我发现在iOS 6上有时会caching请求,即使请求有NSURLRequestReloadIgnoringCacheData 。 添加一个返回nil的caching响应块可以防止请求被caching。

 NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20]; AFJSONRequestOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:request]; // DISABLE CACHE // [op setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) { return nil; }]; [op start]; 

不幸的是这些方法都不适合我。 我设法禁用caching的唯一方法就是这样:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 

这是原来的答案

 NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 

这可能取决于您的服务器实现,但是向您的传出请求添加Cache-Control:no-store头应导致包含相同头的响应,从而命令NSURLCache不caching响应到磁盘。

恕我直言,这是比完全禁用磁盘caching更好的方法,特别是如果您正在编写其他应用程序可能要使用NSURLCache SDK代码。