美文网首页
NSURLCache

NSURLCache

作者: zziazm | 来源:发表于2018-06-26 15:28 被阅读16次

NSURLCache 为应用的 URL 请求提供了内存以及磁盘上的缓存。当一个请求完成下载来自服务器的回应,一个缓存的回应将在本地保存。下一次同一个请求再发起时,本地保存的回应就会马上返回,不需要连接服务器。NSURLCache 会自动地返回回应。

无论是NSURLConnection、NSURLSession还是UIWebView、WKWebView默认都是有缓存设计的(使用NSURLCache)。

缓存策略CachePolicy
  • NSURLRequestUseProtocolCachePolicy:默认缓存策略,对于特定URL使用网络协议中实现的缓存策略。
  • NSURLRequestReloadIgnoringLocalCacheData(或者reloadIgnoringCacheData):不使用缓存,直接请求原始数据。
  • NSURLRequestReturnCacheDataElseLoad:无论缓存是否过期,有缓存则使用缓存,否则重新请求原始数据。(在没有网络的情况下本地有缓存的情况下也会使用缓存,并且request不会有error)
  • NSURLRequestReturnCacheDataDontLoad:无论缓存是否过期,有缓存则使用缓存,否则视为失败,不会重新请求原始数据。
NSURLRequestUseProtocolCachePolicy(默认缓存策略)

默认缓存策略(NSURLRequestUseProtocolCachePolicy)下当客户端发起一个请求时首先会检查本地是否包含缓存,如果有缓存则检查缓存是否过期(通过Cache-Control:max-age或者Expires判断),如果没有过期则直接使用缓存数据。如果缓存过期了,则发起一个请求给服务器端,此时服务器端对比资源Last-Modified或者Etags(二者都存在的情况下下如果有一个不同则认为缓存已过期),如果不同则返回新数据,否则返回304 Not Modified继续使用缓存数据(客户端可以继续使用"max-age"秒缓存数据)。这个过程中客户端发送不发送请求主要看max-age是否过期,而过期后是否继续使用缓存则需要重新发起请求,服务器端根据情况通知客户端是否可以继续使用缓存(返回结果可能是200或者304)。

Set a Cache Policy for URL Requests

Each URLRequest instance contains a URLRequest.CachePolicy object to indicate if and how caching should be performed. You can change this policy to control caching for the request.
For convenience, NSURLSessionConfiguration has a property called requestCachePolicy; all requests created from sessions that use this configuration inherit their cache policy from the configuration.

每一个URLRequest实例都包含了一个
URLRequest.CachePolicy对象表示缓存如何执行。
NSURLSessionConfiguration有一个属性URLCache,用于提供服务器返回的响应的缓存。如果不想缓存,可以把这个属性设置为nil。对于default session,这个属性的默认值是[NSURLCache sharedURLCache]

NSLog(@"%lu, %lu", (unsigned long)[NSURLCache sharedURLCache].memoryCapacity, (unsigned long)[NSURLCache sharedURLCache].diskCapacity);

512000, 10000000

sharedURLCache默认提供了512KB的内存缓存和10MB的磁盘缓存。也可以自定义sharedURLCache的缓存大小:

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:4 * 1024 * 1024
                                                       diskCapacity:20 * 1024 * 1024
                                                           diskPath:nil];
  [NSURLCache setSharedURLCache:URLCache];
}

不用多说,NSURLCache只会对你的GET请求进行缓存。
为什么不对post进行缓存?
因为缓存url请求原理就是判断url是否相同,url相同则读取缓存,url不相同则读取服务器。
使用GET方式提交url类似"http://www.example.com/index.jsp?class=articele&page=5“,而POST方式提交url类似http://www.example.com/index.jsp,参数是在HTTPBODY里的,不在URL上,请求参数URL始终相同。

相关文章

  • NSURLCache官方文档阅读

    NSURLCache Overview NSURLCache类通过将NSURLRequest对象映射到NSCach...

  • [iOS-Foundation] Networking Cach

    NSHipster-NSURLCache NSURLCache 通过保存NSURLRequest对象和其相应的NS...

  • iOS网络请求缓存 - NSURLCache

    NSURLCache NSURLCache为应用程序的URL请求提供复合的内存和磁盘缓存机制。作为Foundati...

  • NSCache & NSDictionary &

    NSCache和NSURLCache一点关系也没有 NSCache和NSURLCache一点关系也没有 NSURL...

  • NSURLCache

    NSURLCache 为应用的 URL 请求提供了内存以及磁盘上的缓存。当一个请求完成下载来自服务器的回应,一个缓...

  • NSURLCache

    cache1、afnetworking默认的NSURLSessionConfiguration 2、系统默认的NS...

  • NSURLCache

    概述 NSURLCache类通过将NSURLRequest对象映射到NSCached URLResponse对象来...

  • NSURLCache

    NSURLCache FrameworkFoundation SDKsiOS 8.0+macOS 10.10+tv...

  • NSURLCache

    NSURLCache为你的url请求提供了内存以及磁盘上的综合缓存机制。使用缓存可以减少向服务发送请求的次数,同时...

  • NSURLCache

    缘由 前一段时间去仿写SDWebImage的时候,就遇到这SDCache和NSURLCache,然后在类中还有地做...

网友评论

      本文标题:NSURLCache

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