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 | 上傳類型 |