美文网首页
iOS网络缓存策略

iOS网络缓存策略

作者: anny_4243 | 来源:发表于2021-07-23 10:20 被阅读0次

    网络缓存模块是移动网络应用的核心模块,对于一些固定的数据或实时性要求并不太强的数据,开发者往往会在应用中使用缓存策略对数据进行持久化保存,直到缓存的数据过期,在缓存过期之前,相同的网络请求都将被拦截。这种做法有许多优势,列举如下。

    (1)节省用户网络传输流量。
    (2)本地数据可以更快地加载,优化用户体验。
    (3)在断网的情况下,用户依然可以浏览曾经浏览过的数据

    为网络请求设置缓存策略

    使用Xcode创建一个名为RequestCacheTest的工程,首先在工程的Info.plist文件中添加支持工程进行HTTP请求的相关键值。在ViewController类的viewDidLoad方法中添加如下测试代码。

    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:10];
        
    NSURLSession *session = [NSURLSession sharedSession];
        
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSLog(@"%@",data);
    }];
    [task resume];
    

    上面的代码使用NSURLSession的类方法从www.baidu.com地址进行数据请求,这里的dataTaskWithRequest方法通过异步的方式进行网络请求,请求返回的数据在block中通过参数传递给开发者。在创建NSURLRequest请求对象时,上面使用了requestWithURL:cachePolocy:timeoutInterval方法,这个方法的第1个参数设置请求地址URL;第2个参数是请求的缓存策略;第3个参数设置请求的超时时间,测试代码中设置了10s,如果10s后无响应数据,请求就会按超时失败处理。缓存策略可以设置的参数为NSURLRequestCachePolicy类型的枚举,这个枚举中除了一些定义的缓存策略外,常用策略如下(以Objective-C版本为例):

    typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
    {
        //使用HTTP/HTTPS中定义的缓存策略
        NSURLRequestUseProtocolCachePolicy = 0,
    
        //无论有无本地缓存数据,都从服务器进行请求
        NSURLRequestReloadIgnoringLocalCacheData = 1,
        
        //先检查缓存数据,如果无缓存再进行请求
        NSURLRequestReturnCacheDataElseLoad = 2,
    
        //类似于离线模式,无论有无缓存都不进行请求
        NSURLRequestReturnCacheDataDontLoad = 3,
    };
    
    

    在上面的缓存策略中,最常用的是NSURLRequestReturnCacheDataElseLoad,这种策略也是基于大多数移动应用的缓存思路。NSURLRequestUseProtocolCachePolicy缓存策略是由服务端定义的,是HTTP/HTTPS协议自带的缓存策略。

    运行一次上面的工程,之后将网络断开,再次运行工程,可以看到打印区域依然打印出了请求数据,实际上第2次的请求已经不通过网络获取了,而是直接从本地获取。

    摘自《iOS开发实战:从入门到上架App Store(第2版)》

    相关文章

      网友评论

          本文标题:iOS网络缓存策略

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