iOS网络缓存策略

简介: iOS网络缓存策略

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


(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版)》

目录
相关文章
|
2月前
|
编解码 异构计算
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
151 9
RT-DETR改进策略【Neck】| BiFPN:双向特征金字塔网络-跨尺度连接和加权特征融合
|
2月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
126 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
2月前
|
机器学习/深度学习 编解码 自动驾驶
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
69 3
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV1,用于移动视觉应用的高效卷积神经网络
|
2月前
|
机器学习/深度学习 移动开发 测试技术
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
86 1
RT-DETR改进策略【模型轻量化】| 替换骨干网络为MoblieNetV2,含模型详解和完整配置步骤
|
2月前
|
人工智能 安全 网络安全
网络安全领导者有效缓解团队倦怠的四步策略
网络安全领导者有效缓解团队倦怠的四步策略
|
1月前
|
数据采集 缓存 JavaScript
数据抓取的缓存策略:减少重复请求与资源消耗
本教程聚焦于提升爬虫效率与稳定性,通过结合缓存策略、代理IP技术(如爬虫代理)、Cookie和User-Agent设置,优化数据采集流程。以知乎为例,详细讲解如何抓取指定关键词的文章标题和内容。内容涵盖环境准备、代码实现、常见问题及解决方案,并提供延伸练习,帮助读者掌握高效爬虫技巧。适合具备Python基础的初学者,助你规避网站机制,顺利获取目标数据。
数据抓取的缓存策略:减少重复请求与资源消耗
|
2月前
|
计算机视觉
RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络
RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络
85 12
RT-DETR改进策略【Neck】| GFPN 超越BiFPN 通过跳层连接和跨尺度连接改进RT-DETR颈部网络
|
2月前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
112 10
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
|
2月前
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
92 2
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 GhostNet V3 2024华为的重参数轻量化模型
|
2月前
|
机器学习/深度学习
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
RT-DETR改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计
109 11

热门文章

最新文章

下一篇
oss创建bucket