zoukankan      html  css  js  c++  java
  • iOS学习之数据请求

    GET请求----同步连接
    //GET请求 同步连接
    - (void)handleSynchronize:(UIBarButtonItem *)item {
        //GET请求
        
        //1.创建网址字符串;
        NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/place/v2/search?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295",@"酒店", @"郑州"];//对于搜索关键字(类型/商区),让用户自行选择.
        //2.URLEncode 编码.如果网址中出现中文,需要更改编码格式;
        NSString *newUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //3.创建NSUrl对象.(NSUrl对象才是真正的网址对象)
        NSURL *url = [NSURL URLWithString:newUrlStr];
        //4.创建请求NSURLRequest
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        
        //同步连接
        NSURLResponse *response = nil; //服务器相应对象,存储服务器响应信息,比如:返回数据的长度,数据的类型等.
        NSError *error = nil; //存储连接错误信息,比如:连接失败,网络中断等.
        NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
        //最后获取的data就是我们通过网址从服务器请求到的数据,是一个JSON格式的数据.
        
        //解析数据,让tableView显示.
        [self parserDataWithData:data]; //解析方法这里不再实现
    }


    GET请求----异步连接
    第一种,block形式.
    //异步连接和同步连接的第一步相同,都需要先GET请求到数据.
    - (void)handleAsynchronize:(UIBarButtonItem *)item {
        //GET请求
        //创建网址字符串对象
        NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/place/v2/search?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295",@"酒店", @"郑州"];
        //URLEncode 编码
        NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //创建真正的网址对象NSUrl
        NSURL *url = [NSURL URLWithString:newStr];
        //创建请求对象
        NSURLRequest *requset = [NSURLRequest requestWithURL:url];
        
        //异步连接 - 第一种,block形式
        [NSURLConnection sendAsynchronousRequest:requset queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
            //data为请求到的数据,接下来进行解析
            [self parserDataWithData:data];
        }];
    
    }
    第二种,代理形式.
    //GET请求 异步连接
    - (void)handleAsynchronize:(UIBarButtonItem *)item {
        //GET请求
        //创建网址字符串对象
        NSString *urlStr = [NSString stringWithFormat:@"http://api.map.baidu.com/place/v2/search?query=%@&region=%@&output=json&ak=6E823f587c95f0148c19993539b99295",@"酒店", @"郑州"];
        //URLEncode 编码
        NSString *newStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        //创建真正的网址对象NSUrl
        NSURL *url = [NSURL URLWithString:newStr];
        //创建请求对象
        NSURLRequest *requset = [NSURLRequest requestWithURL:url];
     
        //异步连接 - 第二种,Delegate形式(服从NSURLConnectionDataDelegate协议)
        [NSURLConnection connectionWithRequest:requset delegate:self];
    
    }
    
    #program mark - NSURLConnectionDataDelegate协议中的方法
    
    //当收到服务器响应时触发,下面开始传输数据了.
    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        //用来开辟空间
        self.mData = [NSMutableData data];
        
    }
    //当收到服务器数据时触发,此方法可能会触发多次.做数据的拼接操作(进度条效果的相关实现代码可以写在此方法中.)
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
        //用来拼接数据
        [self.mData appendData:data];
    }
    //当服务器传输完数据之后触发.此时已经获取到所有的数据.
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        //用来解析数据
        [self parserDataWithData:self.mData];
    }
    
    //当连接失败时触发
    - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    
    }


    
    

    同步连接和异步连接的区别:

    同步连接:网络请求任务由主线程完成,当主线程在处理网络请求时,所有的用户交互都无法完成,影响用户体验.

    异步连接:网络请求任务由子线程完成,当子线程在处理网络任务的时候,主线程依然可以处理用户交互,所以用户事件能够得到及时处理,用户体验好.(以空间换时间).
     


  • 相关阅读:
    图片懒加载技术
    验证码处理
    基于requests模块的cookie,session和线程池爬取
    最快理解
    Golang
    Django REST framework
    Django REST framework
    Django
    Django
    搭建邮件服务器 Postfix + Dovecot (CentOS)
  • 原文地址:https://www.cnblogs.com/ErosLii/p/4512920.html
Copyright © 2011-2022 走看看