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 验证本地数据与远程数据是否相同,如果不同则下载远程数据,否则使用本地数据。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容