iOS网络传输Delegate不被触发的本质缘由

NSURLSession一共有四种Delegate (文后附表有Session和SessionTask分类表格)缓存

NSURLSessionDelegate, NSURLSessionDownloadDelegate,session

NSURLSessionTaskDelegate, NSURLSessionDataDelegate函数

NSURLSession设置Delegate的时候只设置一个delegate,就已经表明了四个delegate所有被设置了。有时候一些delegate不会被触发的缘由在于这四种delegate是针对不一样的URLSession类型和URLSessionTask类型来进行响应的,也就是说不一样的类型只会触发这些delegate中的一部分,而不是触发全部的delegateurl

 

举例说明以下spa

1.触发NSURLSessionDataDelegatecode

使用函数dataTask来接收数据blog

-(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.触发NSURLSessionDownloadDelegateit

使用函数downloadTask来接受数据io

-(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              上传类型
相关文章
相关标签/搜索