NSURLSession是從IOS7.0出來代替NSURLConnection。Session發佈三種任務。DataTask,UploadTask,DownloadTask,而且任務都是默認掛起的。須要Resume。所謂掛起,就是任務執行(下載)一半時候能夠總體中止,掛起。當須要的時候再繼續。而之前的Connnection中的斷點續傳工做直接就是把connection取消掉了。json
(1)當使用get請求是,NSURLRequest能夠省略。網絡
(2)session提供了單例的方法。session
(3)NSURLConnection常規網絡請求步驟:app
1.拿到URL框架
2.NSURLRequest性能
3.NSURLConnectionurl
(4)NSURLSession常規網絡請求步驟:spa
1.拿到URL代理
2.NSURLSession單例code
3.session任務發佈
4.啓動任務resume
(5)DataTask代碼實現:
1 - (void)session{ 2 3 //1.url 4 NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/demo.json"]; 5 6 //2.3.4單例全局session發佈任務而且執行 7 [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 8 // 回調 9 10 NSLog(@"%@",[NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]); 11 12 }] resume]; 13 14 }
(6)DownLoadTask
從IOS7.0開始,程序使用FreamWork不須要添加引用。只須要import就行。Xcode會自動添加。可是動態庫須要手動添加。
1.動態庫:須要手動添加 。內存中只有一個,性能好,安裝在系統級的位置中,供全部app使用。
2.靜態庫:不一樣的app,內存副本有不少。哪一個app須要就copy處一個。(支付寶什麼的是靜態庫---由於動態庫沒法上架)。
因爲當前的不少下載都是zip格式,因此Session默認downLoad方法是放到tmp,而後刪除的。由於這是蘋果作的一個默認的壓縮包刪除。因此此時要在Session任務的回調時,對數據進行解壓縮。這時候用到了一個第三方框架---SSZipArchive
SSZipArchive框架解析:
1 // Unzip 2 3 // 將文件解壓縮到指定目錄 4 + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination; 5 // 將文件解壓縮到指定目錄,同時指定密碼 6 + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError **)error; 7 // 將文件解壓縮到指定目錄,而且設置代理(回調解壓縮進度) 8 + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(id<SSZipArchiveDelegate>)delegate; 9 // 將文件解壓縮到指定目錄,同時指定密碼,而且設置代理 10 + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError **)error delegate:(id<SSZipArchiveDelegate>)delegate; 11 12 // Zip 13 + (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)filenames; 14 + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath; 15 16 - (id)initWithPath:(NSString *)path; 17 - (BOOL)open; 18 - (BOOL)writeFile:(NSString *)path; 19 - (BOOL)writeData:(NSData *)data filename:(NSString *)filename; 20 - (BOOL)close; 21 22 @end 23 24 25 @protocol SSZipArchiveDelegate <NSObject> 26 27 @optional 28 29 // 代理 30 - (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo; 31 - (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath; 32 33 - (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; 34 - (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; 35 36 - (void)zipArchiveProgressEvent:(NSInteger)loaded total:(NSInteger)total; 37 @end
(7)進度跟進
當跟進進入時候,就沒法使用全局Session,所有Session是爲全部應用程序服務的。而跟蹤進度是須要用到代理,代理是1對1的。因此通常都會當成屬性來建立一個Session。