美文网首页
AFNetworking网络缓存

AFNetworking网络缓存

作者: 溪石iOS | 来源:发表于2019-01-18 22:36 被阅读59次

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

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

    相关文章

      网友评论

          本文标题:AFNetworking网络缓存

          本文链接:https://www.haomeiwen.com/subject/ccmodqtx.html