iOS網路開發(3)使用NSURLSession

來源:互聯網
上載者:User

標籤:ios   app   xcode   網路編程   nsurlsession   資料任務   

  • NSURLSession介紹

NSURLSession在iOS7.0開始引入,在架構中的地位與NSURLConnection並列

    NSURLSession能夠完成所有NSURLConnection的功能,並且進行了非常大的功能擴充


從iOS9.0開始,蘋果正式棄用NSURLConnection


為NSURLSession的使用過程涉及到的主要類即它們之間的關係

     650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/7C/B2/wKiom1bWdTPh9yjOAAF0FwGe7SU279.png" title="螢幕快照 2016-03-02 下午1.08.10.png" alt="wKiom1bWdTPh9yjOAAF0FwGe7SU279.png" />


三種工作模式:

     預設會話模式:類似於NSURLConnection,使用磁碟緩衝

     瞬時會話模式:不使用磁碟緩衝

     後台會話模式:在程式進入後台時也能上傳或下載


     NSURLSessionConfigration用於產生這三種工作模式的配置,方法如下

+ (NSURLSessionConfiguration *)defaultSessionConfiguration+ (NSURLSessionConfiguration *)ephemeralSessionConfiguration+ (NSURLSessionConfiguration *)backgroundSessionConfigurationWithIdentifier:(NSString *)identifier


NSURLSession會話對象的建立:

// 使用預設會話模式、預設的緩衝、cookie及credential+ (NSURLSession *)sharedSession// 使用指定的工作模式+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration*)configuration// 使用指定的工作模式、任務運行時的隊列、代理+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration*)configuration delegate:(id<NSURLSessionDelegate>)delegate delegateQueue:(NSOperationQueue *)queue


NSURLSession發送網路請求的使用步驟:

    a. 建立任務對象

    b. 控制任務的執行

    c. 在block或代理方法中獲得任務執行的結果


支援的三種任務:(任務的基類NSURLSessionTask)

     資料任務  使用NSURLSessionDataTask描述

     下載任務  使用NSURLSessionDownloadTask描述

     上傳任務  使用NSURLSessionUploadTask描述



  • 任務對象的

NSURLSession中的任務對象NSURLSessionTask,全部由NSURLSession對象建立

    強調:非同步作業不會阻塞當前代碼的執行,無法通過傳回值或參數獲得結果

NSURLSessionTask任務對象的狀態:

@property(readonly) NSURLSessionTaskState statetypedef NS_ENUM (NSInteger, NSURLSessionTaskState ) {    NSURLSessionTaskStateRunning = 0,     // 運行狀態    NSURLSessionTaskStateSuspended = 1,   // 掛起狀態    NSURLSessionTaskStateCanceling = 2, // 取消狀態    NSURLSessionTaskStateCompleted = 3, // 完成狀態};


當一個任務對象被建立後,任務的狀態為掛起狀態

控制任務執行(修改任務狀態)的方法:

- (void)cancel     // 取消任務- (void)resume     // 運行任務- (void)suspend    // 掛起任務


  • 資料任務 — block方式獲得結果

資料任務建立:

- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError*error))completionHandler

    在block中處理請求後的結果(響應資料、響應對象、錯誤對象)

    如:發送一個GET請求,擷取指定遊戲任務資訊的JSON資料

NSString *urlStr = @"http://localhost/lolShow.php?number=20&from=0";NSURL * url = [NSURL URLWithString:urlStr];NSURLRequest * request = [NSURLRequest requestWithURL:url];//建立資料任務NSURLSession * session = [NSURLSession sharedSession];NSURLSessionDataTask * dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {    if ( error ) {        NSLog(@"1 %@", [error localizedDescription]);        return ;    }    //將JSON資料序列化為OC對象    NSArray * arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];    if ( error ) {        NSLog(@"2 %@", [error localizedDescription]);        return ;    }    //字典轉模型    for (NSDictionary * dict in arr ) {        AMHeroModel * model = [AMHeroModel heroModelWithDict:dict];        [self.heroInfoArray addObject:model];    }    [[NSOperationQueue mainQueue] addOperationWithBlock:^{        [self stopLoading];//重新整理UI    }];}];//啟動任務[dataTask resume];



  • 資料任務 — 代理方式獲得結果

資料任務的建立:

- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request

NSURLSession的代理屬性

@property(readonly, retain) id< NSURLSessionDelegate > delegate

    涉及的代理協議: <NSURLSessionDelegate><NSURLSessionTaskDelegate>

          <NSURLSessionDataDelegate><NSURLSessionDownloadDelegate>


資料任務常用的代理方法:

//接收到應答對象- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler//接收到資料(可能執行多次)- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask*)dataTask didReceiveData:(NSData *)data//完成一個請求的應答過程- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

     


本文出自 “安萌” 部落格,請務必保留此出處http://annmeng.blog.51cto.com/3321237/1746703

iOS網路開發(3)使用NSURLSession

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.