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];

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