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              上傳類型
相關文章
相關標籤/搜索