iOS网络编程(二):NSURLConnection介绍

NSURLConnection在iOS7之后基本被NSURLSession,但为了兼容,有必要学习一下。

网络请求分为同步和异步两种:

  • 同步是指在请求结果返回之前,程序代码会卡在请求处,之后的代码不会被执行,请求返回结果后,之后的代码再执行。
  • 异步是指在发送请求之后,一边在子线程中接收返回数据,一边执行之后的代码,当返回数据接收完毕后,采用回调的方式通知主线程做处理。

一、NSURLConnection同步请求

// 同步
- (void)tongbu {
    NSURL * url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSLog(@"%@",data);
    NSLog(@"继续执行");
}

而、NSURLConnection异步请求

  1. block方式的异步请求
// block的异步
- (void)yibu {
    NSURL * url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    //其中的queue参数决定block中的代码在哪个队列中执行
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",data);
    }];
    NSLog(@"继续执行");
}
  1. 代理回调方式的异步请求
    采用协议和声明一个用户接受数据的可变NSData:
@interface ViewController ()
{
    NSMutableData * _data;
}

请求代码:

// 代理回调的异步
- (void)yibu_delegate {
    _data = [[NSMutableData alloc]init];
    NSURL * url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    [NSURLConnection connectionWithRequest:request delegate:self];
}

实现代理方法:

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    //开始接收数据
    [_data setLength:0];
    NSLog(@"%s","开始接收数据");
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    //正在接收数据
    [_data appendData:data];
    NSLog(@"%s","正在接收数据");
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    //接收数据失败
    NSLog(@"%@",error);
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
    //接收数据完成
    NSLog(@"%@",_data);
}

代码:NSURLConnection

参考:iOS网络编程之三——NSURLConnection的简单使用

你可能感兴趣的:(iOS网络编程(二):NSURLConnection介绍)