NSURLSession的基本使用

個人理解 有誤的地方 歡迎小伙伴能給指出

1. 使用步驟
使用NSURLSession創(chuàng)建task,然后執(zhí)行task

  1. 關(guān)于task
    a.NSURLSessionTask是一個抽象類,本身不能使用,只能使用它的子類
    b.NSURLSessionDataTask\NSURLSessionUploadTask\NSURLSessionDownloadTask

  2. 發(fā)送get請求

  • 創(chuàng)建NSURLSession對象(可以獲取單例對象)
    NSURLSession *session = [NSURLSession sharedSession];

  • 根據(jù)NSURLSession對象創(chuàng)建一個Task
    NSURL *url = [NSURL URLWithSting:@"路徑"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    方法參數(shù)說明
    
  • 注意:該block是在子線程中調(diào)用的,如果拿到數(shù)據(jù)之后要做一些刷新UI操作,那么需要回到主線程刷新
    第一個參數(shù):需要發(fā)送的請求對象
    block:當請求結(jié)束拿到服務器響應的數(shù)據(jù)時調(diào)用block
    block-NSData:該請求的響應體
    block-NSURLResponse:存放本次請求的響應信息,響應頭,真是類型為NSHTTPURLResponse
    block-nsercroe:請求錯誤信息
    NSURLSessionDataTask * dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {

    拿到響應頭信息
    NSHTTPURLResponse *res =(NSHTTPURLResponse *)response;

  • 解析拿到的響應數(shù)據(jù)
    NSLog(@"%@\n%@,[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);
    }];
    執(zhí)行task
    注意:剛創(chuàng)建出來的task默認是掛起狀態(tài)的 需要調(diào)用該方法啟動任務
    [dataTask resume];

  1. 發(fā)送get請求的第二種方式
    注意;該方法內(nèi)部默然會把URL對象包裝成一個NSURLReques對象(默認是GET請求)
    方法參數(shù)說明
    第一個參數(shù): 發(fā)送請求URL地址
    block:當請求結(jié)束拿到服務器響應的數(shù)據(jù)時調(diào)用block
    block-NSData:該請求的響應題
    block-NSURLResponse:存放本次請求的響應信息.響應頭,真實類型為NSHTTPURLResponse
    block-NSErroe:請求錯誤信息
    - (nullable NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error))completionHandler;

  2. 發(fā)送POST請求
    創(chuàng)建NSURLSession對象(可以獲取單例對象)
    NSURLSession *session = [NSURLSession sharedSession];
    根據(jù)NSURLSession對象創(chuàng)建一個Task
    NSURL *url = [NSURL URLWithString:@"URL路徑 '];
    創(chuàng)建一個請求對象,并設(shè)置請求方法為POST 把參數(shù)放在請求體重傳遞
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    request.HTTPMethod = @"POST";
    request.HTTPBody = [@"參數(shù)" dataUsingEncoding:NSUTF8StringEncoding];

     NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * __nullable data, NSURLResponse * __nullable response, NSError * __nullable error) {
    

拿到響應頭信息
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
解析拿到響應數(shù)據(jù)
NSLog(@"%@\n%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding],res.allHeaderFields);
}];

執(zhí)行Task
注意剛創(chuàng)建出來的Task默認是掛起狀態(tài) 需要調(diào)用該方法來啟動
[dataTask resume];


純手動 有誤的地方希望大家能給指出 謝謝
如果對您有幫助 希望能給個關(guān)注和喜歡~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容