设为首页 加入收藏

TOP

NSURLConnection & NSRULSession(一)
2017-10-13 10:29:06 】 浏览:9557
Tags:NSURLConnection NSRULSession

NSURLConnection & NSRULSession

NSURLSession是NSURLConnection 的替代者,在2013年苹果全球开发者大会(WWDC2013)随ios7一起发布,是对NSURLConnection进行了重构优化后的新的网络访问接口。从iOS9.0开始, NSURLConnection中发送请求的两个方法已过期(同步请求,异步请求),初始化网络连接(initWithRequest: delegate:)的方法也被设置为过期,系统不再推荐使用,建议使用NSURLSession发送网络请求。

1 NSURLConnection

1.1  NSURLConnection 中常用的类

(1)NSURL:请求地址

(2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法、请求头、请求体....

(3)NSMutableURLRequest:NSURLRequest的子类

(4)NSURLConnection:负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据

1.2 NSURLConnection的使用步骤

(1)创建一个NSURL对象,设置请求路径(设置请求路径)

(2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(创建请求对象)

(3)使用NSURLConnection发送NSURLRequest(发送请求)

注:发送请求的时候包括

同步请求:即一直等待服务器返回数据,有返回值,容易卡住代码

异步请求:没有返回值,不会造成卡

默认的NSURLRequest请求是GET 请求

2      NSRULSession

NSURLSession是iOS7中新的网络接口,它与NSURLConnection是并列的。程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。注意,如果用户强制将程序关闭,NSURLSession会断掉。

2.1 NSRULSession提供的功能

> 通过URL将数据下载到内存

> 通过URL将数据下载到文件系统

> 将数据上传到指定URL

> 在后台完成上述功能

2.2 NSURLSession提供的三个类方法进行配置信息

default 方法:配置信息使用基于硬盘的持久Cache,保证用户的信息到钥匙串,使用共享的 cookie 进行存储.

Ephemeral方式:和default方式大致一致,除了不会将cache, 证书,或者任何 session 相关的数据保存到硬盘中,而是保存到内存中.生命周期和 session 一致.应用实例:浏览器的无痕功能的实现.

Background 方式:配置信息可以创建一个在后台或者APP 已经关闭的情况下传输数据的 session.注:后台 APP 在创建的时候一定要赋予一个标示符,这样在 APP 下次启动的时候可以很顺利的找到对应的.如果用户关闭了 APP,iOS会关闭所有的 background session,而且,被用户强制性关闭后, iOS 不会唤醒 APP, 除非用户自己点击 APP.

3 比较

3.1 NSURLSession针对下载/上传等复杂的网络操作提供了专门的解决方案,针对普通、上传和下载分别对应三种不同的网络请求任务:NSURLSessionDataTask, NSURLSessionUploadTask和NSURLSessionDownloadTask.。

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

3.2 当服务器返回的数据较小时,NSURLSession与NSURLConnection执行普通任务的操作步骤没有区别。

执行上传任务时,NSURLSession与NSURLConnection一样同样需要设置POST请求的请求体进行上传。

执行下载任务的时候,NSURLConnection下载文件时,先将整个文件下载到内存,然后再写入沙盒,如果文件比较大,就会出现内存暴涨的情况。而使用NSURLSessionDownloadTask下载文件,会默认下载到沙盒中的tem文件夹中,不会出现内存暴涨的情况.但在下载完成后会将tem中的临时文件删除,因此需要在初始化任务方法时,在completionHandler回调中增加保存文件的代码。代码如下NSURLSessionDownloadTask *task = [session downloadTaskWithURL:[NSURL URLWithString:@"http://127.0.0.1/dawenjian.zip"] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {

   //获取沙盒的caches路径

   NSString *path = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@"kkk.dmg"];

   //生成URL路径

   NSURL *DCurl = [NSURL fileURLWithPath:path];

   //将文件保存到指定文件目录下

   [[[NSFileManager defaultManager] moveItemAtURL:location toURL:DCurl error:nil] resume];

3.3 请求过程的控制

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

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

3.4 断点续传

NSURLConnection进行断点下载,通过设置访问请求的HTTPHeaderField的Range属性,开启运行循环,NSURLConnection的代理方法作为运行循环的事件源,接收到下载数据时代理方法就会持续调用,并使用NSOutputStream管道流进行数据保存。

NSURLSession进行断点下载,当暂停下载任务后,如果 downloadTask (下载任务)为非空,调用 cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler 这个方法,这个方法接收一个参数,完成处理代码块,这个代码块有一个 NSData 参数 resumeData,如果 resumeData 非空,我

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇旋转木马效果 下一篇加密

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目