iOS网络传输Delegate不被触发的本质原因
NSURLSession一共有四种Delegate (文后附表有Session和SessionTask分类表格)
NSURLSessionDelegate, NSURLSessionDownloadDelegate,
NSURLSessionTaskDelegate, NSURLSessionDataDelegate
NSURLSession设置Delegate的时候只设置一个delegate,就已经代表了四个delegate全部被设置了。有时候一些delegate不会被触发的原因在于这四种delegate是针对不同的URLSession类型和URLSessionTask类型来进行响应的,也就是说不同的类型只会触发这些delegate中的一部分,而不是触发所有的delegate
举例说明如下
1.触发NSURLSessionDataDelegate
使用函数dataTask来接收数据
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
则NSURLSession部分的代码如下
1 NSURLSessionConfiguration* ephConfiguration=[NSURLSessionConfiguration defaultSessionConfiguration]; 2 NSURLSession* session=[NSURLSession sessionWithConfiguration:ephConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 3 NSURL* url=[NSURL URLWithString:@"http://www.example.com/external_links/01.png"]; 4 NSURLSessionDataTask* dataTask=[session dataTaskWithURL:url]; 5 [dataTask resume];
2.触发NSURLSessionDownloadDelegate
使用函数downloadTask来接受数据
-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location
则NSURLSession部分的代码如下
1 NSURLSessionConfiguration* ephConfiguration=[NSURLSessionConfiguration defaultSessionConfiguration]; 2 NSURLSession* session=[NSURLSession sessionWithConfiguration:ephConfiguration delegate:self delegateQueue:[NSOperationQueue mainQueue]]; 3 NSURL* url=[NSURL URLWithString:@"http://www.example.com/external_links/01.png"]; 4 NSURLSessionDownloadTask* dataTask=[session downloadTaskWithURL:url]; 5 [dataTask resume];
这两段代码的主要区别在于NSURLSessionTask的类型的不同,造成了不同的Delegate被触发
附表
URLSession的分类
Session类型 | 特点解释 |
Default Session | 可以缓存到Disk,可以Pause |
Ephemeral Session | 短暂的进程,存储在RAM |
Background Session | 可以Background Running,其他特点类似Default Session |
SessionTask的分类
SessionTask类型 | 特点解释 |
data Tasks | 小文件的交互 |
download Tasks | 下载类型 |
upload Tasks | 上传类型 |
转载于:https://www.cnblogs.com/cnyin/p/4812490.html
iOS网络传输Delegate不被触发的本质原因相关推荐
- iOS 网络传输数据安全以及常用的加密算法使用
我们常说的数据安全:主要分为两种,数据本身的安全和数据防护安全. 数据本身的安全包括数据保密,数据完整性验证,数据双向认证等. 数据防护安全包括磁盘阵列,数据备份,异地容灾等. App安全问题主要包括 ...
- iOS网络经典知识点收录整理(OSI分层协议作用介绍和传输全过程)
重要知识点目录 从URL输入到网页显示的全过程解析 TCP底层三次握手解析 OSI分层知识点记录介绍 1.链路层 2.网络层 ARP IPv4 IPv6 ICMP(异常协议) 3.传输层 4.应用层 ...
- iOS网络高级编程:iPhone和iPad的企业应用开发之错误处理
本章内容 ● iOS应用中的网络错误源 ● 检测网络的可达性 ● 错误处理的经验法则 ● 处理网络错误的设计模式 到目前为止,我们所介绍的iPhone与其他系统的网络交互都是基 ...
- iOS网络缓存扫盲篇--使用两行代码就能完成80%的缓存需求
原文地址:https://github.com/ChenYilong/ParseSourceCodeStudy/blob/master/02_Parse的网络缓存与离线存储/iOS网络缓存扫盲篇.md ...
- iOS网络编程-iCloud键值数据存储编程实例
iCloud键值数据存储设计 iCloud键值数据存储编程实例,画面中有两个开关控件,左图是设备1点击"设置iCloud数据"按钮,将控件状态保存到iCloud服务器.右图是设备2 ...
- Android 实现无网络传输文件(2)
在我的上一篇文章:Android 实现无网络传输文件,我介绍了通过 Wifi Direct(Wifi 直连)实现 Android 设备之间进行文件传输的方法,可以在无移动网络的情况下实现点对点的文件传 ...
- iOS网络开发中的同步、异步和请求队列
在iOS网络编程中,我们经常会遇到线程的同步和异步问题,同时为了对异步请求更加精准丰富的控制,我们还常常在iOS中使用请求队列,下面就来谈谈iOS开发中同步.异步以及请求队列的使用方法. 1. 同步意 ...
- iOS网络编程开发—HTTP协议
iOS网络编程开发-HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- 由STGW下载慢问题引发的网络传输学习之旅
导语:本文分享了笔者现网遇到的一个文件下载慢的问题.最开始尝试过很多办法,包括域名解析,网络链路分析,AB环境测试,网络抓包等,但依然找不到原因.然后利用网络命令和报文得到的蛛丝马迹,结合内核网络协议 ...
最新文章
- 五分钟搭建一个基于BERT的NER模型
- Centos修改系统语言
- Noriben沙箱:分分钟搞定恶意软件
- Fragment详解之四——管理Fragment(2)
- 青春环游记 | 雪中悍刀行之卡尔曼的鱼【回顾 2021,展望 2022】
- __int64 与long long 的区别
- 查询进程打开的文件(转)
- 一般通话记录能保存多少条_鸡蛋放冰箱,能保存多少天?正确保存方法是什么?...
- 【TensorFlow】TensorFlow函数精讲之tf.clip_by_value()
- 5G汽车联盟与欧洲汽车电信联盟签署合作谅解备忘录
- html如何隐藏盒子的边框线,用DIV和CSS做一个实线边框的红色盒子
- vue视频保存不下来_女子直播吃章鱼被“反杀”!拔不下来了,视频超痛……
- 高程拟合MATLAB二次曲面,GPS高程二次曲面拟合及其程序
- python 基础学习(小甲鱼)
- EasyAPI基于电子发票API接口二维码小票对接方案
- 遥感的几何校正、正射校正、辐射校正
- 计算几何2- 判断两线段是否相交
- Android Studio出现Execution failed for task ‘:app:processDebugMainManifest
- Typescript 史上最强学习入门文章 ( 2w 字)
- 进程调度算法相关习题
热门文章
- python手机版安卓-当python遇到Android手机 那么,万物皆可盘
- 如何用python画出中国地图-用Python画一个中国地图
- python教程书籍-大牛推荐的10本学习 Python 的好书
- python第三方库numpy-Python中的第三方库——Numpy
- python读数据-如何用 Python 读取数据?
- python使用什么注释语句和运算-Python代码注释的用法和意义
- 西安python培训班多少钱-西安python培训多少钱?
- python好学吗一般要学多久-转行学Python开发难吗,月薪过万需要多久
- 9.9学python靠谱吗-宅家亲测:9.9的python体验课,到底值不值?
- python拼音怎么写-Python 中拼音库 PyPinyin 的用法