IOS开发之网络异步GET请求

同步与异步请求的区别,主要是对于UI冻结的情况是不同的,速度上没什么区别,速度取决于网络情况。但是在UI的反应上,同步请求,在响应数据没有拿到之前UI是不能处理其他事情的,处于一种等待状态;异步请求,在响应数据没有拿到之前UI是不会冻结的,UI仍然可以响应用户的操作。

异步请求的步骤和同步请求的步骤大致是一样的,不过异步请求通过NSURLConnection有两种方式,即:使用代理或者代码块。

1.创建NSURL

 NSString *urlString = @"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00zMf9ND9ip3KCc14c03c2900L6tAc";
    //编码
    urlString = [urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSURL *url = [NSURL URLWithString:urlString];

2.创建一个url请求

NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];




3.建立NSURLConnection发送异步请求

//使用代理发送
[NSURLConnection connectionWithRequest:request delegate:self];

4.使用代理需要实现的一些方法

//需要遵循的协议NSURLConnectionDelegate
@interface ViewController ()<NSURLConnectionDelegate>
//遵循协议需要实现的三个方法
//服务器开始响应,准备向客户发送数据
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(nonnull NSURLResponse *)response{

    NSLog(@"服务器开始响应,准备向客户端发送数据");
}

//从服务器接收到数据,并且此方法会执行多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(nonnull NSData *)data{

    NSLog(@"从服务器接收到数据,并且此方法会执行多次");
   //把下载的数据连续存到_mDataGet中
    [_mDataGet appendData:data];
}

//接收数据完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSLog(@"接收数据完成");
    //数据接收完成,使用NSJSONSerialization解析
    NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:_mDataGet options:NSJSONReadingAllowFragments error:nil];
    WeiBoModel *model = [[WeiBoModel alloc] initWithDictionary:dictionary];
    NSString *text = [model.statuses[0] objectForKey:@"text"];
    //更新UI需要回到主线程
[self.textView performSelectorOnMainThread:@selector(setText:) withObject:text waitUntilDone:NO];

5.使用代码块

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

        NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        WeiBoModel *model = [[WeiBoModel alloc] initWithDictionary:dictionary];
        NSString *text = [model.statuses[0] objectForKey:@"text"];

        dispatch_async(dispatch_get_main_queue(), ^{
            self.textView.text = text;
        });






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值