如何禁用AFNetworking缓存

Ash*_*ggs 19 caching ios afnetworking

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

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

谢谢,阿什利

mat*_*ttt 25

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

也就是说,除非你有一个非常特别的理由来编写自己的缓存系统,否则我强烈建议不要这样做.NSURLCache是应用99.9%的不够好:它从传入响应处理缓存指令和新的要求适当地使用它们,并在某种程度上是不太可能在你的应用程序中的性能瓶颈,从而自动完成.作为一个浪费了无数个小时自己制作一个人的人(之后因为完全没必要而扔掉它),我会说有更好的地方可以集中你的发展注意力.

  • 已经是吗?目前看起来它将为您自动生成.https://github.com/AFNetworking/AFNetworking/blob/experimental-1.0RC1/AFNetworking/UIImageView%2BAFNetworking.m#L70 (4认同)
  • 还有什么方法可以禁用它吗?我真的需要这个,因为我的缓存系统无论如何都有点不正统.这是一个真正必须禁用缓存. (3认同)

add*_*gen 25

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

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

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

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

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
                                                        diskCapacity:0
                                                            diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
Run Code Online (Sandbox Code Playgroud)

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


Jas*_*ore 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];
Run Code Online (Sandbox Code Playgroud)

  • 对于使用`AFHTTPClient`,我们应该覆盖`requestWithMethod:path:parameters` .Call super方法来获取`NSURLRequest`并说`request.cachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;` (4认同)

Jak*_*lik 10

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

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
Run Code Online (Sandbox Code Playgroud)

这是最初的答案