美文网首页程序员iOS锻炼吃饭的家伙
NSURLRequestCachePolicy—iOS缓存策略

NSURLRequestCachePolicy—iOS缓存策略

作者: senpaiLi | 来源:发表于2018-04-30 16:31 被阅读516次

NSURLRequestCachePolicy:顾名思义,是为了与cached responses确定交互策略的枚举,具体枚举值如下:

typedef enum NSURLRequestCachePolicy : NSUInteger {  

     NSURLRequestUseProtocolCachePolicy = 0,

     NSURLRequestReloadIgnoringLocalCacheData = 1,

     NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4,

     //NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,

     NSURLRequestReturnCacheDataElseLoad = 2,

     NSURLRequestReturnCacheDataDontLoad = 3,

     NSURLRequestReloadRevalidatingCacheData = 5

}NSURLRequestCachePolicy;

我们的缓存策略会在NSURLRequest和NSURLProtocol体现,如果你想对cached responses做自定义的处理,需要在这两个类进行操作;   对于用户来说,则会造成不同的体验

注意:只有响应http和https的请求会被缓存,其他的协议需要去自定义。

NSURLRequestUseProtocolCachePolicy逻辑树

简短的概括:

1、如果没有缓存,会直接从后台请求数据

2、如果没必要每次重新验证cache,且cache还是新鲜的(几天之内,几小时?的数据),返回cache response

3、如果cache是不新鲜的,或者需要每次重新验证cache,会发送Head请求到源数据判断cache是否被改变。如果改变了,去后端请求,没有改变则返回cache response

NSURLRequestUseProtocolCachePolicy:默认策略,具体的缓存逻辑和协议的声明有关,如果协议没有声明,不需要每次重新验证cache。    如果请求协议头为no-cache,则表现为直接从后台请求数据

NSURLRequestReloadIgnoringLocalCacheData:忽略本地缓存,直接从后台请求数据

NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地缓存数据、代理和其他中介的缓存,直接从后台请求数据

NSURLRequestReturnCacheDataElseLoad:优先从本地拿数据,且忽略请求生命时长和过期时间。但是如果没有本地cache,则请求源数据

NSURLRequestReturnCacheDataDontLoad:只从本地拿数据

NSURLRequestReloadRevalidatingCacheData:每次必须重新验证cache

相关文章

网友评论

    本文标题:NSURLRequestCachePolicy—iOS缓存策略

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