关闭

NSURLCache使用的坑

2996人阅读 评论(0) 收藏 举报
分类:

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

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

NSURLCache缓存使用简介

一、需求1.在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在IOS设备中加一个缓存的机制。使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。...
  • jingcheng345413
  • jingcheng345413
  • 2017-02-10 12:05
  • 1349

NSURLCache缓存的位置

前言 对于NSURLRequest,我们都很熟悉。在创建request时,可以设置属性cachePolicy,决定从本地还是网络上获取内容。那么如果是从本地取的话,是从哪取呢?下面来简单聊一下。...
  • fishmai
  • fishmai
  • 2017-03-03 09:52
  • 981

NSURLCache,iOS

1.在didFinishLaunchingWithOptions添加初始化缓存方法。 - (BOOL)application:(UIApplication *)application did...
  • inoke
  • inoke
  • 2015-06-26 17:26
  • 102

[iOS] NSURLCache && NSCachedURLResponse

NSURLCache 1. 初始化相关的几个方法:sharedURLCache;setSharedURLCache;initWithMemoryCapacity sharedURLCach...
  • perfect_promise
  • perfect_promise
  • 2012-07-13 09:45
  • 3090

NSURLCache详解和使用

http://www.cnblogs.com/cbw1987/p/5910624.html NSURLCache详解和使用 使用缓存的目的是为了使应用程序能更快速的响应用户输入...
  • jeffasd
  • jeffasd
  • 2017-03-03 15:04
  • 498

iOS URL缓存策略------------NSURLCache、 NSURLRequest

使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURL...
  • hnjyzqq
  • hnjyzqq
  • 2015-01-23 23:42
  • 2157

iOS NSURLCache(网络缓存)

转自:http://blog.csdn.net/ruiwang321/article/details/51036364 两行代码就能完成80%的缓存需求 - (BOOL)application:(...
  • Jason_chen13
  • Jason_chen13
  • 2016-07-21 17:30
  • 4303

iOS网络——NSURLCache设置网络请求缓存

http://www.cnblogs.com/madpanda/p/4700741.html?utm_source=tuicool&utm_medium=referral 今天在看HTT...
  • jeffasd
  • jeffasd
  • 2016-06-15 14:30
  • 1884

76.iOS 网络缓存(NSURLCache/NSCachedURLResponse)

iOS 中的一些缓存包括NSURLCache/NSCachedURLResponse,以及NSURLRequestCachePolicy 缓存策略
  • wangyanchang21
  • wangyanchang21
  • 2016-04-05 16:07
  • 1577

用NSURLCache解决UIWebView请求远程资源慢的问题

正常情况下当你需要写一个具备网络连接的iOS程序,你会想要一个本地的iOS接口能够接收网络上的所有数据。然而,在项目中总是有一些限制你可以实现的东西,而且有时候你可能想要为用户显示一个规整的页面。 ...
  • jinglijun
  • jinglijun
  • 2013-03-01 22:00
  • 13635
    个人资料
    • 访问:45816次
    • 积分:1496
    • 等级:
    • 排名:千里之外
    • 原创:105篇
    • 转载:5篇
    • 译文:3篇
    • 评论:4条
    最新评论