IOS网络开发NSURLSession详解(一)概述

IOS网络开发NSURLSession详解(一)概述

一. 概述

NSURLSession是iOS SDK提供的一组相对容易使用的网络API。它包括几个部分NSURLRequest,NSURLCache、NSURLSession、NSURLSessionConfiguration,NSURLSessionTask。iOS的网络编程除了NSURLSession,也可以使用NSURLConnection,后者易用性教差。网络开发整体包括五个部分

支持的协议(例如http)
授权和证书(例如服务器要求提供用户名密码)
cookie存储(例如不存储cookie)
cache管理(例如只在内存cache,不cache到硬盘)
配置管理(例如http headers等配置信息)

二 简单介绍下NSURLSession的几个核心类

1.1 NSURLSessionConfiguration

指定NSURLSession的配置信息。这些配置信息决定了NSURLSession的种类,HTTP的额外headers,请求的timeout时间,Cookie的接受策略等配置信息。

这里详情讲解下三种NSURLSessionConfiguration,这决定了NSURLSession种类

    • (NSURLSessionConfiguration *)defaultSessionConfiguration,使用基于硬盘的持久化Cache,保存用户的证书到钥匙串,使用共享cookie存储
    • (NSURLSessionConfiguration *)emhemeralSessionConfiguration配置信息和default大致相同。除了不会把cache、证书或者任何和Session相关的数据存储到硬盘,而是存储在内存中,生命周期和Session一致。比如浏览器无痕浏览等功能就可以基于这个来做。
    • (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString )identifier创建一个可以在后台甚至APP已经关闭的时候仍然传输数据的会话。注意,后台Session一定要在创建的时候赋予一个唯一的identifier,这样在APP下次运行的时候,能够根据identifier来进行相关的区分。如果用户关闭了APP,iOS系统会关闭所有的background Session。而且被用户强制关闭了以后,iOS系统不会主动唤醒APP,只有用户下次启动了APP,数据传输才会传输。

1.2 NSURLSessionTask

DataTask - 用来请求资源,然后服务器返回数据,再内存中存储为NSData格式。default,ephemeral,shared Session支持data task. background session不支持。

Upload Task - 和Data Task类似,只不过在请求的时候提供了request body。并且background Session 支持upload task

Download Task - 下载内容到硬盘上,所有类型的Session都支持。

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

1.3 NSURLSession

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

self.session = [NSURLSession sesstionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];

创建一个task

NSURLSessionDataTask *dataTask = [self.session dataTaskWithURL:[NSURL URLWithString:imageURL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){}]

1.4 NSURLRequest

指定请求的URL和cache策略
例如,如下这个初始化函数

(instancetype)requestWithURL:(NSURL *)theURL

就是在初始化的时候指定url,cachePolicy以及timeoutinterval
通过NSURLRequest可以设置HTTPMethod,默认是GET

1.5 NSURLCache

cache URL 请求返回的response。

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

当然,通过这个类也可以获得当前cache的使用情况。

1.6 NSURLResponse NSHTTPURLResponse

通过REST API进行资源操作的时候,有request必须就有response。NSURLResponse包含了metadata,例如返回的数据长度(expectedContentLength)MIME类型 text编码方式
NSHTTPURLResponse是NSURLResponse的子类,由于绝大部分的REST都是HTTP的,所以,通常遇到的都NSHTTPURLResponse对象。通过这个对象可以获得:HTTP的headers,status Code等信息,其中:HTTP headers包含的信息较多

1.7 NSURLCredential

用来处理证书信息。比如用户名密码,服务器授权等,根据不同的认证方式来处理。

基于用户名密码的认证

+ (NSURLCredential *)credentialWithUser:(NSString *)user password:(NSString *)password persistence:(NSURLCredentialPersistence)persiste

基于证书的

+ credentialWithIdentity:certificates:persistence

1.8 NSURLAuthenticationChallenge

在访问资源的时候,可能服务器会返回需要授权(提供一个NSURLCredential对象)。那么,URLSession:task:didReceiveChallenge:completionHandler被调用。需要的授权信息会保存在这个类的对象里。

1.9 NSURLProtectionSpace

这个类的对象代表了服务器上的一块需要授权信息的区域,通过这个对象信息来响应Challenge。比如:如果服务器需要一个基于用户名密码的认证,那么应该先参考下NSURLProtectionSpace对象的host,port,realm,protocol等信息,然后依照这个信息提供证书

转载自https://blog.csdn.net/hello_hwc/article/details/44513699

你可能感兴趣的:(IOS网络开发NSURLSession详解(一)概述)