使用AFNetworking 2.0管理缓存图像

时间:2014-02-23 00:27:15

标签: ios iphone caching afnetworking

我使用AFNetworking 2.0将一些图像加载到我的应用程序中。默认情况下,它会缓存它。我不想总是从缓存加载图像。我想仅在Web图像和缓存图像不相同时才从缓存加载图像。那我怎么能这样做呢?

我的代码:

  AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:urlRequest];
  requestOperation.responseSerializer = [AFImageResponseSerializer serializer];
 [requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Response: %@", responseObject);
_imageView.image = responseObject;

 } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Image error: %@", error);
 }];
 [requestOperation start];

2 个答案:

答案 0 :(得分:1)

处理缓存的正确方法是修改服务器的cache-control标头,以描述客户端缓存给定资源的时间。 URL基础加载系统将遵循服务器提供的标头。

除非你有充分的理由禁用客户端的内置缓存机制,否则你不应该 - 它会使你的应用程序在99%的情况下变慢,因为在很多情况下你的应用可能会尝试获得相同的资源。

如果需要覆盖客户端,请为应用程序中使用的AFNetworking请求序列化程序创建子类,并在它们返回的NSMutableURLRequests上设置cachePolicy。然后将此请求序列化程序分配给请求操作管理器或会话管理器。

答案 1 :(得分:0)

创建cachePolicy时需要指定NSURLRequest

+ (id)requestWithURL:(NSURL *)theURL 
         cachePolicy:(NSURLRequestCachePolicy)cachePolicy 
     timeoutInterval:(NSTimeInterval)timeoutInterval

cachePolicy的值应为NSURLRequestUseProtocolCachePolicy。

  

<强> NSURLRequestUseProtocolCachePolicy

     

指定协议中定义的缓存逻辑   实现(如果有)用于特定的URL加载请求。   这是URL加载请求的默认策略。

您还应该确保回复包含Cache-Control HTTP标头。此标头必须存在于服务器的响应中,以便客户端启用HTTP缓存。

如果您仍然获得缓存的图像,这意味着服务器只是在Cache-Control HTTP标头中告诉您使用缓存。这应该很容易在服务器端更改。但是,有时您无权访问服务器。在这种情况下,您可以回退到使用NSURLRequestReloadIgnoringLocalCacheData,这将忽略您的缓存数据并下载新图像。