美文网首页
NSURLCache使用的坑

NSURLCache使用的坑

作者: 啷里个啷里个啷个里个啷 | 来源:发表于2017-02-27 16:32 被阅读0次

    NSURLCache使用有许多限制,苹果限制的。

    1.只能用在get请求里面,post可以洗洗睡了。

    2.缓存机制选择 NSURLRequestReturnCacheDataElseLoad

    有缓存从缓存取数据,没有缓存从网络取数据。

    3.需要服务器定义数据是否发生变化,allHeaderFields里可以查找到是否修改了的信息。公司服务器没有定义的话,就不能够判断读取的缓存数据是否需要刷新。

    4.原先网络请求的回调会被缓存结果代替,意思:有缓存的情况下根本不会去网络获取数据,返回的都是缓存结果,除非服务器allHeaderFields数据发生了变化——-大坑,所以会变动的数据就尽量不要用这种方式请求了。一般也应用于离线阅读,不会改变数据的地方。

    5.删除缓存的removeCachedResponseForRequest 这个方法是无效的.所以缓存是不会被删除的—只有删除全部缓存才有效—————————————————————

    6.相关资料很少:这是摸坑后可以跑的内容,不能删除对应缓存没有什么意义。

    NSURL*url = [NSURLURLWithString:@"www.abc.com"];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];// 2.设置缓存策略(有缓存就用缓存,没有缓存就重新请求)request.cachePolicy= NSURLRequestReturnCacheDataElseLoad;

    request.timeoutInterval=60.0f;// 3.发送请求[NSURLConnectionsendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data,NSError*connectionError) {if(data) {//                  NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];//  NSLog(@"%@", dict);NSLog(@"---从缓存获取,没有缓存就从服务器请求获取%@",[(NSHTTPURLResponse*)response allHeaderFields][@"Date"]);

    }

    }];

    NSURLCache *cache = [NSURLCache sharedURLCache];

    NSCachedURLResponse *response = [cache cachedResponseForRequest:request];

    if(response) {//缓存时间信息NSDate*cachesDate= [NSDatedateFromRFC822String:[(NSHTTPURLResponse*)response.responseallHeaderFields][@"Date"]];//当前时间[NSDategetCurrentTimeFromWeb:^(NSDate*currentTime) {NSTimeIntervalsecondsInterval= [currentTime timeIntervalSinceDate:cachesDate];NSLog(@"secondsInterval=  %lf秒",secondsInterval);if(secondsInterval<=15.0) {

    request.cachePolicy= NSURLRequestReturnCacheDataElseLoad;NSLog(@"---无需删除缓存%@",[(NSHTTPURLResponse*)response.responseallHeaderFields][@"Date"]);

    }//时间超过,过期if(secondsInterval>15.0) {

    [cache removeAllCachedResponses];NSLog(@"---删除缓存%@",[(NSHTTPURLResponse*)response.responseallHeaderFields][@"Date"]);

    }

    }];

    }else{NSLog(@"---这个请求没有缓存");

    }

    7.综上所述,还是自己缓存吧,这个nsurlcache没什么鸟用,自己做一套写进数据库,不知道好多少。

    8.参考链接:

    http://www.cnblogs.com/wendingding/p/3950198.html

    http://stackoverflow.com/questions/25596424/nsurlcaches-removecachedresponseforrequest-has-no-effect

    https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md

    原文:http://blog.csdn.net/github_35041937/article/details/51545932

    相关文章

      网友评论

          本文标题:NSURLCache使用的坑

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