NSURLSession

一、概述

NSURLSession包括5个部分:
NSURLRequest,
NSURLCache,
NSURLSession,
NSURLSessionConfiguration,
NSURLSessionTask。

二、NSURLSession的几个核心类

2.1 NSURLSessionConfiguration
NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类,HTTP的额外headers,请求的timeout时间,Cookie的接受策略等配置信息。更多的参见官方文档。

这里大概阐述下决定NSURLSession种类的三种NSURLSessionConfiguration:
a.

+(NSURLSessionConfiguration *)defaultSessionConfiguration

defaultSession,使用基于硬盘的持久话Cache,保存用户的证书到钥匙串,使用共享cookie存储

b.

+(NSURLSessionConfiguration *)ephemeralSessionConfiguration
配置信息和default大致相同。除了,不会把cache,证书,或者任何和Session相关的数据存储到硬盘,而是存储在内存中,生命周期和Session一致。比如浏览器无痕浏览等功能就可以基于这个来做。

c.

+(NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier
创建一个可以在后台甚至APP已经关闭的时候仍然在传输数据的会话。注意,后台Session一定要在创建的时候赋予一个唯一的identifier,这样在APP下次运行的时候,能够根据identifier来进行相关的区分。如果用户关闭了APP,IOS 系统会关闭所有的background Session。而且,被用户强制关闭了以后,IOS系统不会主动唤醒APP,只有用户下次启动了APP,数据传输才会继续。

2.2 NSURLSessionTask
session任务分三种:

NSURLSession_第1张图片

DataTask -用来请求资源,然后服务器返回数据,再内存中存储为NSData格式。default,ephemeral,shared Session支持data task。background session不支持。
Upload Task-和DataTask类似,只不过在请求的时候提供了request body。并且background Session支持 upload task。
Download Task-下载内容到硬盘上,所有类型的Session都支持。

注意,创建的task都是挂起状态,需要resume才能执行。

2.3 NSURLSession

会话是基于NSURLSession网络开发的核心组件。由上文的Configuration来配置,然后作为工厂,创建NSURLSessionTask来进行实际的数据传输任务。

//Configuration来配置,初始化session
self.session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

//创建一个task
NSURLSessionDataTask * dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:imageURL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    }];

//开始
[dataTask resume];

2.4 NSURLRequest

指定请求的URL和cache策略。
就是在初始化的时候指定url,cachePolicy以及 timeoutInterval.
通过NSURLRequest可以设置HTTPMethod,默认是GET

(instancetype)requestWithURL:(NSURL *)theURL  cachePolicy:(NSURLRequestCachePolicy)cachePolicy  timeoutInterval:(NSTimeInterval)timeoutInterval

2.5 NSURLCache

cache URL请求返回的response。
当然,通过这个类也可以获得到当前cache的使用情况。

实现的方式是把NSURLRequest对象映射到NSCachedURLResponse对象。可以设置在内存中缓存的大小,以及在磁盘中缓存的大小和路径。
不是特别需要的话,使用Shared Cached足矣,如果有特别需要,创建一个NSURLCache对象,然后通过+ setSharedURLCache 来设定。

2.6 NSURLResponse/NSHTTPURLResponse

通过REST API进行资源操作的时候,有request(请求)必然就有response(响应)。

NSURLResponse中包含了metadata,例如返回的数据长度(expectedContentLength),MIME 类型,text编码方式。

NSHTTPURLResponse是NSURLResponse的子类,由于绝大部分的REST都是HTTP的,所以,通常遇到的都是NSHTTPURLResponse对象。通过这个对象可以获得:HTTP的headers,status Code等信息。

2.7 NSURLCredential

  • 用来处理证书信息

你可能感兴趣的:(NSURLSession)