NSURLSession

  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。

相關文章
相關標籤/搜索