AFNetworking网络缓存

如果你已经使用AFNetworking作为你的http网络框架,就没必要自己实现缓存机制了,直接配置就可以了:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer.cachePolicy = NSURLRequestReloadRevalidatingCacheData;
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain",@"text/html",nil];
[manager GET:@"https://www.baidu.com/"
  parameters:nil
    progress:nil
     success:^(NSURLSessionDataTask * _Nonnull task,
               id  _Nullable responseObject) {
         NSLog(@"%@", responseObject);
     }
     failure:^(NSURLSessionDataTask * _Nullable task,
               NSError * _Nonnull error) {
         
     }];

可以有以下选择:

  • NSURLRequestUseProtocolCachePolicy NSURLRequest 默认的cache policy,使用Protocol协议定义。
  • NSURLRequestReloadIgnoringCacheData 忽略缓存,直接从原始地址下载,用于实时数据。
  • NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式。
  • NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载,适用一些不太会变化的数据。

注意以下策略是未实现的:

  • NSURLRequestReloadIgnoringLocalAndRemoteCacheData 忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
  • NSURLRequestReloadRevalidatingCacheData 验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。

可以通过时间戳比对等方法自行实现,需要服务端配合。

猜你喜欢

转载自blog.csdn.net/weixin_34090562/article/details/87296622
今日推荐