標籤:lang sources delegate 代理 ons images response conf min
(1)建立NSURLSession對象,設定代理(預設配置)
//1.建立NSURLSession,並設定代理 /* 第一個參數:session對象的全域配置設定,一般使用預設配置就可以 第二個參數:誰成為session對象的代理 第三個參數:代理方法在哪個隊列中執行(在哪個線程中調用),如果是主隊列那麼在主線程中執行,如果是非主隊列,那麼在子線程中執行 */ NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
(2)根據Session對象建立一個NSURLSessionDataTask任務(post和get選擇)
//建立taskNSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_01.png"];//注意:如果要發送POST請求,那麼請使用dataTaskWithRequest,設定一些要求標頭資訊NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url];
(3)執行任務(其它方法,如暫停、取消等)
//啟動task //[dataTask resume]; //其它方法,如取消任務,暫停任務等 //[dataTask cancel]; //[dataTask suspend];
(4)遵守代理協議,實現代理方法(3個相關的代理方法)
/* 1.當接收到伺服器響應的時候調用 session:發送請求的session對象 dataTask:根據NSURLSession建立的task任務 response:伺服器響應資訊(回應標頭) completionHandler:通過該block回調,告訴伺服器端是否接收返回的資料 */-(void)URLSession:(nonnull NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler/* 2.當接收到伺服器返回的資料時調用 該方法可能會被調用多次 */-(void)URLSession:(nonnull NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveData:(nonnull NSData *)data/* 3.當請求完成之後調用該方法 不論是請求成功還是請求失敗都調用該方法,如果請求失敗,那麼error對象有值,否則那麼error對象為空白 */-(void)URLSession:(nonnull NSURLSession *)session task:(nonnull NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error
(5)當接收到伺服器響應的時候,告訴伺服器接收資料(調用block)
//預設情況下,當接收到伺服器響應之後,伺服器認為用戶端不需要接收資料,所以後面的代理方法不會調用 //如果需要繼續接收伺服器返回的資料,那麼需要調用block,並傳入對應的策略 /* NSURLSessionResponseCancel = 0, 取消任務 NSURLSessionResponseAllow = 1, 接收任務 NSURLSessionResponseBecomeDownload = 2, 轉變成下載 NSURLSessionResponseBecomeStream NS_ENUM_AVAILABLE(10_11, 9_0) = 3, 轉變成流 */ completionHandler(NSURLSessionResponseAllow);
NSURLSession下載檔案-代理