【问题标题】:Manage cache images with AFNetworking 2.0使用 AFNetworking 2.0 管理缓存图像
【发布时间】:2014-03-24 15:04:49
【问题描述】:

我使用 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];

【问题讨论】:

    标签: ios iphone caching afnetworking


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      创建NSURLRequest时需要指定cachePolicy

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

      cachePolicy 的值应该是 NSURLRequestUseProtocolCachePolicy。

      NSURLRequestUseProtocolCachePolicy

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

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

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

      【讨论】:

      • 谢谢,如何测试 AFNetworking 2.0 以缓存加载或下载?
      • 在服务器端改一下图片看看AFNetworking是下载还是使用缓存的。
      猜你喜欢
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 2014-03-29
      相关资源
      最近更新 更多