NSURLSession(二)

NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的。

如果用户强制将程序关闭,NSURLSession会断掉

 

NSURLSession提供的功能:
1.通过URL将数据下载到内存
2.通过URL将数据下载到文件系统
3.将数据上传到指定URL
4.在后台完成上述功能

 

工作流程

如果我们需要利用NSURLSession进行数据传输我们需要:

1.创建一个NSURLSessionConfiguration,用于第二步创建NSSession时设置工作模式和网络设置:

工作模式分为:

一般模式(default):工作模式类似于原来的NSURLConnection,可以使用缓存的Cache,Cookie,鉴权。

及时模式(ephemeral):不使用缓存的Cache,Cookie,鉴权。

后台模式(background):在后台完成上传下载,创建Configuration对象的时候需要给一个NSString的ID用于追踪完成工作的Session是哪一个(后面会讲到)。

 

网络设置:参考NSURLConnection中的设置项。

1. 创建一个NSURLSession,系统提供了两个创建方法:

sessionWithConfiguration:

sessionWithConfiguration:delegate:delegateQueue:

    

第一个粒度较低就是根据刚才创建的Configuration创建一个Session,系统默认创建一个新的OperationQueue处理Session的消息。

 

第二个粒度比较高,可以设定回调的delegate(注意这个回调delegate会被强引用),并且可以设定delegate在哪个OperationQueue回调,如果我们将其设置为[NSOperationQueue mainQueue]就能在主线程进行回调非常的方便。

 

2.创建一个NSURLRequest调用刚才的NSURLSession对象提供的Task函数,创建一个NSURLSessionTask。

 

根据职能不同Task有三种子类:

NSURLSessionUploadTask:上传用的Task,传完以后不会再下载返回结果;

NSURLSessionDownloadTask:下载用的Task;

NSURLSessionDataTask:可以上传内容,上传完成后再进行下载。

 

得到的Task,调用resume开始工作。

3.如果是细粒度的Session调用,Session与Delegate会在指定的OperationQueue中进行交互

 

4.当不再需要连接调用Session的invalidateAndCancel直接关闭,或者调用finishTasksAndInvalidate等待当前Task结束后关闭。这时Delegate会收到URLSession:didBecomeInvalidWithError:这个事件。Delegate收到这个事件之后会被解引用。

 

5.如果是一个BackgroundSession,在Task执行的时候,用户切到后台,Session会和ApplicationDelegate做交互。当程序切到后台后,在BackgroundSession中的Task还会继续下载

 

 

在普通的应用场景下NSURLSession与NSURLConnection相比没有什么优势,但是在程序切换到后台之后Background的Session就显得更加灵活


__EOF__

本文作者若云
本文链接https://www.cnblogs.com/fucker/articles/5027756.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   若云  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示