iOS-NSURLConnection与NSURLSession区别

2013年苹果全球开发者大会上(WWDC2013)发布的iOS7系统中推出的NSURLSession,是对NSURLConnection替代者。从iOS9开始,NSURLConnection中发送请求的两个方法已经过期(同步请求,异步请求),初始化网络连接的方法也被设置为过期,系统不再推荐使用,建议使用NSURLSession发送网络请求。

下载优化

NSURLConnection下载文件时,先是将整个文件下载到内存,然后再写入到沙盒,如果文件比较大,就会出现内存暴涨的情况。

NSURLSessionUploadTask下载文件时,会默认下载到沙盒中的tmp文件中,不会出现内存暴涨的情况 。下载完成后会把tmp中的临时文件删除,需要在初始化任务方法时,在completionHandler回调中增加保存文件的代码。

任务调度

NSURLConnection对象实例化之后,默认请求就发送(同步发送),不需要调用start方法。通过cancel停止请求的发送,停止后不能继续访问,需要创建新的请求。

NSURLSession有三个控制方法,取消(cancel)、暂停(suspend)、继续(resume),暂停以后可以通过继续恢复当前的请求任务。

后台下载和上传

NSURLSession要实现后台传输服务,可以通过[NSURLSessionConfiguration backgroundSessionConfiguration]来创建一个会话配置。添加到后台会话的任务在app进程外部运行,即使应用程序被挂起,崩溃,或者被杀死,它依然会运行。

NSURLSessionConfiguration*config=[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.flyelephant.backgroundSessionIdentifier"];_backgroundSession=[NSURLSession sessionWithConfiguration:config delegate:selfdelegateQueue:nil];

网络配置

@property(class,readonly,strong)NSURLSessionConfiguration*defaultSessionConfiguration;@property(class,readonly,strong)NSURLSessionConfiguration*ephemeralSessionConfiguration;+(NSURLSessionConfiguration*)backgroundSessionConfigurationWithIdentifier:(NSString*)identifierAPI_AVAILABLE(macos(10.10),ios(8.0),watchos(2.0),tvos(9.0));

NSURLSession在初始化时会把配置它的NSURLSessionConfiguration对象进行一次 copy,并保存到自己的configuration属性中,而且这个属性是只读的。因此之后再修改最初配置session的那个configuration对象对于session是没有影响的。

NSURLSessionConfiguration提供了三个方法来创建Session Configuration对象:

defaultSessionConfiguration:该方法返回创建的一个默认Session Configuration对象。默认的Session Configuration会使用磁盘来缓存数据并在用户的keychain中存储凭证。它同样会存储cookie。

ephemeralSessionConfiguration:返回一个session configuration,且不会使用缓存,cookie和凭证。使用ephemeral sessions主要的优点就是隐私。因此,它可以用于实现像秘密浏览这种功能。

backgroundSessionConfigurationWithIdentifier::返回一个后台的session configuration。后台session不同于常规的,普通的session,它甚至可以在应用程序挂起,退出或者崩溃的情况下运行上传和下载任务。初始化时指定的标识符,被用于向任何可能在进程外恢复后台传输的守护进程(daemon)提供上下文

作者:FlyElephant

链接:https://www.jianshu.com/p/e9776eb2a008

来源:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(iOS-NSURLConnection与NSURLSession区别)