IOS開發學習分享(二)——網絡請求框架NSURLSession簡單GET請求使用

剛剛接觸IOS開發,雖然聽說過AFNetworking等有名的框架,但是由於只是想實現簡單的Get請求,所以決定使用IOS自帶的NSURLSession框架。


1.首先是構建出一個NSURLSession

//構建一個URL
    NSURL *url = [[NSURL alloc] initWithString:@"http://..."];
//創建一個request對象
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
//創建session,並設置委託,用於監聽請求
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self.delegate delegateQueue:[[NSOperationQueue alloc] init]];

2.接下來則是同步請求的寫法

    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        NSLog(@"%@ %@ %@ %@", data, response, error, [NSThread currentThread]);
    }];

3.異步請求的寫法

    //初始化任務
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
    //發送請求(執行Task)
    [dataTask resume];

這裏主要講一下異步請求如何獲取數據
首先先了解一下NSURLSession的協議NSURLSessionDataDelegate的兩個委託方法

//接收到服務器端傳輸的數據時的回調方法
-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
    //按順序拼接服務器傳輸的數據:數據一般分多次返回,每次返回的數據量跟當前的網絡狀態、和 服務器當前正在處理的請求個數有個
    [_result appendData:data];
}
/**
 *  請求結束或者是失敗的時候調用
 *  @param session           會話對象
 *  @param error             錯誤信息
 */
-(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
     NSLog(@"接收到得到數據是%@",_result);
     //清空數據
     [_result resetBytesInRange:NSMakeRange(0, self.result.length)];
    _result.length = 0;
}

由於數據量過大是多次接受,而第二個函數又沒有參數可以得到所有數據,因此一般做法是定義一個NSMutableData變量存獲得的數據存取數據。

4.最後是對數據的處理,這個根據業務各有不同,下面是我對數據解析的一般寫法,講數據轉化爲字典處理

/將字符串寫到緩衝區。
    NSString *data = [[NSString alloc] initWithData:_result encoding:NSUTF8StringEncoding];
    NSData* jsonData = [data dataUsingEncoding:NSUTF8StringEncoding];
    //解析json數據,使用系統方法 JSONObjectWithData:  options: error:
    NSDictionary* dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章