如何禁用AFNetworking缓存

时间:2012-04-01 20:30:40

标签: ios caching afnetworking

是否可以从AFNetworking中禁用所有缓存功能?

我正在构建自己的自定义缓存系统,并且不希望这也占用磁盘空间。

谢谢, 阿什利

6 个答案:

答案 0 :(得分:25)

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

那就是说,除非你有一个非常特别的理由来编写自己的缓存系统,否则我会强烈推荐它。对于99.9%的应用程序来说,NSURLCache足够好了:它处理来自传入响应的缓存指令,并在新请求中适当地使用它们,并以一种不太可能成为应用程序性能瓶颈的方式自动执行。作为一个浪费了无数时间自己制作一个人的人(以后因为完全没必要而扔掉它),我会说有更好的地方可以集中你的发展注意力。

答案 1 :(得分:25)

最初我找到了Jason Moore的工作答案,但最近我注意到我的应用程序仍在缓存请求。我没有使用最新的AFNetworking,所以我不知道在最近的版本中是否已经解决了缓存问题。

Apple的URLCache项目有这样的说法:

  

默认情况下,Cocoa URL加载系统使用小型共享内存   缓存。我们不需要这个缓存,因此我们将它设置为零   应用程序启动。

然后执行此操作以禁用缓存。

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

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

答案 2 :(得分:23)

我在iOS 6上发现,即使请求有NSURLRequestReloadIgnoringCacheData,有时也会缓存请求。添加返回nil的缓存响应块可防止缓存请求。

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];

答案 3 :(得分:10)

不幸的是,这些方法都不适用于我。我设法禁用缓存的唯一方法就是这样:

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

Here's the original answer

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这可能取决于您的服务器实现,但在传出请求中添加 var threeObjects = {}; 标头应该会产生包含相同标头的响应,从而命令Cache-Control:no-store不将响应缓存到磁盘。

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