Fork me on GitHub

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

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

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

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

一、NSURLConnection同步请求

1
2
3
4
5
6
7
8
// 同步
- (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方式的异步请求

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 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(@"继续执行");
    }
  2. 代理回调方式的异步请求
    采用协议和声明一个用户接受数据的可变NSData:

    1
    2
    3
    4
    @interface ViewController ()<NSURLConnectionDataDelegate>
    {
    NSMutableData * _data;
    }

请求代码:

1
2
3
4
5
6
7
// 代理回调的异步
- (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];
}

实现代理方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-(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介绍
  • 本文作者: AndyRon
  • 发布时间: 2017年09月19日 - 00:00
  • 最后更新: 2017年10月08日 - 14:27
  • 本文链接: http://andyron.com/2017/ios-network-2.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!