NSURLCache使用的坑
来源:互联网 发布:文章网站源码 编辑:程序博客网 时间:2024/04/29 17:51
NSURLCache使用有许多限制,苹果限制的。
1.只能用在get请求里面,post可以洗洗睡了。
2.缓存机制选择 NSURLRequestReturnCacheDataElseLoad
有缓存从缓存取数据,没有缓存从网络取数据。
3.需要服务器定义数据是否发生变化,allHeaderFields里可以查找到是否修改了的信息。公司服务器没有定义的话,就不能够判断读取的缓存数据是否需要刷新。
4.原先网络请求的回调会被缓存结果代替,意思:有缓存的情况下根本不会去网络获取数据,返回的都是缓存结果,除非服务器allHeaderFields数据发生了变化——-大坑,所以会变动的数据就尽量不要用这种方式请求了。一般也应用于离线阅读,不会改变数据的地方。
5.删除缓存的removeCachedResponseForRequest 这个方法是无效的.所以缓存是不会被删除的—只有删除全部缓存才有效—————————————————————
6.相关资料很少:这是摸坑后可以跑的内容,不能删除对应缓存没有什么意义。
NSURL *url = [NSURL URLWithString:@"www.abc.com"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 2.设置缓存策略(有缓存就用缓存,没有缓存就重新请求) request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; request.timeoutInterval = 60.0f; // 3.发送请求 [NSURLConnection sendAsynchronousRequest: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= [NSDate dateFromRFC822String:[(NSHTTPURLResponse*)response.response allHeaderFields][@"Date"]]; //当前时间 [NSDate getCurrentTimeFromWeb:^(NSDate *currentTime) { NSTimeInterval secondsInterval= [currentTime timeIntervalSinceDate:cachesDate]; NSLog(@"secondsInterval= %lf秒",secondsInterval); if (secondsInterval<=15.0) { request.cachePolicy = NSURLRequestReturnCacheDataElseLoad; NSLog(@"---无需删除缓存%@",[(NSHTTPURLResponse*)response.response allHeaderFields][@"Date"]); } //时间超过,过期 if (secondsInterval>15.0) { [cache removeAllCachedResponses]; NSLog(@"---删除缓存%@",[(NSHTTPURLResponse*)response.response allHeaderFields][@"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
- NSURLCache使用的坑
- NSURLCache缓存使用简介
- NSURLCache详解和使用
- NSURLCache详解和使用
- NSURLCache缓存的位置
- NSURLCache
- NSURLCache
- NSURLCache
- NSURLCache
- nsurlcache
- NSURLCache
- NSURLCache
- NSURLCache
- NSURLCache
- NSURLCache
- NSURLCache
- nsurlcache
- NSURLCache
- 用代码创建并实例化在storyboard中声明的ViewController
- JQuery中的动画整理
- Cisco MDS 9124 实战配置
- 异步交互AsyncTask
- 关于Asp.net中GridView控件不显示部分列数据的方法
- NSURLCache使用的坑
- 再谈终端设备
- Android代码中设置字体大小
- 勤劳的蜜蜂
- SVG字体图标格式解析
- 使用ftp4j类来实现FTP操作
- 突然想到的seo问题
- MYSQL查询表达方式
- 奇偶分割数组