在AFNetworking 2.0caching

所以这是交易。 我最近开始使用AFNetworking在开始时使用下面的代码下载几个文件:

NSMutableURLRequest* rq = [api requestWithMethod:@"GET" path:@"YOUR/URL/TO/FILE" parameters:nil]; AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:rq] autorelease]; NSString* path=[@"/PATH/TO/APP" stringByAppendingPathComponent: imageNameToDisk]; operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"SUCCCESSFULL IMG RETRIEVE to %@!",path) } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Deal with failure }]; 

随着我的path实际上插入到pathvariables(对不起,现在不是正确的计算机上复制意大利面的文本,但它是完全一样的上述不同的path的东西)

而且一切都很好! 我正在成功下载文件和一切。 我目前的问题是,我试图caching工作,但我有很多困难。 基本上,我不确定在AFNetworking 2.0中,我真的需要客户端。 我是否还需要设置NSURlCache? 我是否需要对请求操作设置cachingtypes标头? 我认为这可能是完全内置的,但是每次代码运行时我都会收到200的状态,即使文件没有改变。 如果我必须使用NSUrlCache,我是否必须手动将e-tag保存在成功块请求操作上,然后将其反馈回来? 任何帮助如何进步将不胜感激。 多谢你们!

AFNetworking默认使用NSURLCache进行caching。 从常见问题解答 :

AFNetworking利用了NSURLCache及其任何子类已经提供的cachingfunction。 只要您的NSURLRequest对象具有正确的caching策略,并且您的服务器响应包含有效的Cache-Control标头,响应将自动为后续请求caching。

请注意,这种机制cachingNSData ,所以每次从这个caching中检索,你需要执行一个稍微昂贵的NSDataUIImage操作。 例如,如果您正在UITableViewUICollectionView显示图像,这不足以快速显示。

如果是这种情况,请查看UIImageView+AFNetworking ,它将UIImage对象的下载和caching添加到UIImageView 。 对于某些应用程序,您可以使用开箱即用的实现,但这是非常基本的。 你可能想看看这个类的源代码(它不是很长),并将其用作你自己的caching机制的起点。