iOS NSURLSession 指南

与NSURLConnection比较。

一、NSURLConnection实际上指的是Foundation中的一套组件,包括:NSURLRequest, NSURLResponse, NSURLProtocol, NSURLCache, NSHTTPCookie, NSURLCredentialStorage, 以及NSURLConnection。 二、NSURLRequest封装了一个实际的请求,保存发送给服务器的全部数据,包括URL,请求头,方法等。 Connection对象负责发送一个request请求,创建与服务器的连接并收集来自服务器的数据。 三、请求被发送前,先访问共享的缓存,而后服务器能够发出验证,而后经过共享的cookie,证书或链接委托自动处理。缓存

以上是NSURLConnection的一些概览。安全

NSURLSession的不一样

与Connection相比,Session的改善有:服务器

一、可单独配置每一个会话的缓存、协议、cookie、证书策略、甚致跨应用共享。 二、能够在后台使用。cookie

NSURLSession的组成:

一、与以前相同的组件如: NSURLRequest、NSURLCache。 二、NSURLConnection被替换为NSURLSession,NSURLSessionConfiguration,NSURLSessionTask。网络

NSURLSessionTask:

sessionTask负责加载数据。它们共享session的委托。全部的任务都可以取消、暂停、恢复。任务应该使用session建立而不是直接使用init方法。 它包括三个子类:NSURLSessionDataTask、NSURLSessionUploadTask、NSURLSessionDownloadTask。 当dataTask完成时,它具备关联的数据。downloadTask完成时,它具备一个已下载文件的临时路径。 如下是简易的使用方法:session

NSURL *URL = [NSURL URLWithString:@"http://example.com"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
                                        completionHandler:
    ^(NSData *data, NSURLResponse *response, NSError *error) {
        // ...
    }];
[task resume];
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSData *data = ...;
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request
                                                            fromData:data
                                                  completionHandler:
    ^(NSData *data, NSURLResponse *response, NSError *error) {
        // ...
    }];
[uploadTask resume];

NSURLSessionConfiguration:

configuration对象用于初始化session对象,定义了session如何产生请求,如访问性能、cookie、安全性、缓存策略等。 配置只在初始化的时候被读取一次,以后是不可变的。函数

configuration有三个构造函数分别用于三个别同的场景。性能

  • defaultSessionConfiguration: 这实际上与NSURLConnection的网络协议栈是同样的,它使用共享的默认网络配置。code

  • ephemeralSessionConfiguration: 返回一个预设的场配置,没有缓存、cookie或证书。视频

  • backgroundSessionConfiguration: 建立一个后台会话,能够在应用程序挂起或退出的状况下运行任务。

configuration的属性:

  • HTTPAdditionalHeaders指定了默认的请求头。

  • networkServiceType 对标准网络流量、网络电话、语音、视频以及一个后台进程应该使用的流量进行了区分。

  • allowsCellularAccess和discretionary 用于节省经过蜂窝网络链接的带宽。建议使用后台传输的时候使用discretionary属性,由于allowCellularAccess会把 wifi和电源可用性考虑在内。

  • timeoutIntervalForRequest和timeoutForResource 指定请求和资源超时时间。

  • HTTPMaximumConnectionsPerHost 指定链接到特定主机的链接数量。

  • HTTPCookieStorage 是被会话使用的cookie存储。默认状况下,NSHTTPCookieShorage的+ sharedHTTPCookieStorage会被使用,这与NSURLConnection是相同的。

  • HTTPCookieAcceptPolicy 决定了该会话应该接受从服务器发出的cookie的条件。

  • HTTPShouldSetCookies 指定了请求是否应该使用会话HTTPCookieStorage的cookie。

  • URLCredentialStorage 是会话使用的证书存储。默认状况下,NSURLCredentialStorage 的+ sharedCredentialStorage 会被使用使用,这与NSURLConnection是相同的。

  • TLSMaximumSupportedProtocol 和 TLSMinimumSupportedProtocol 肯定是否支持SSLProtocol版本的会话。

  • URLCache 是会话使用的缓存。默认状况下,NSURLCache 的+ sharedURLCache 会被使用,这与NSURLConnection是相同的。

相关文章
相关标签/搜索