2

所以这是交易。我最近开始使用 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
}];

我的路径实际上插入了路径变量(对不起,现在不在正确的计算机上实际复制意大利面文本,但它与上面的完全相同,但路径不同)

一切都很好!我正在成功下载文件和所有内容。我目前的问题是我试图让缓存工作,但我遇到了很多困难。基本上,我不确定从 AFNetworking 2.0 开始我实际上必须在客户端做什么。我还需要设置 NSURlCache 吗?我是否需要在请求操作上设置不同的缓存类型标头?我认为它可能只是完全内置的,但是每次代码运行时我都会收到 200 的状态,即使文件没有更改。如果我必须使用 NSUrlCache,我是否必须自己手动保存成功块请求操作上的电子标签,然后再将其反馈回来?任何有关如何取得进展的帮助将不胜感激。多谢你们!

4

1 回答 1

4

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

AFNetworking 利用了已经由NSURLCache它的任何子类提供的缓存功能。只要您的NSURLRequest对象具有正确的缓存策略,并且您的服务器响应包含有效的Cache-Control标头,响应将自动缓存以供后续请求使用。

请注意,此机制缓存NSData,因此每次从该缓存中检索时,都需要执行一些昂贵的NSData操作UIImage。这对于快速显示来说不够高效,例如,如果您在UITableView或中显示图像UICollectionView

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

于 2013-11-11T20:43:59.433 回答