zoukankan      html  css  js  c++  java
  • NSURLConnection基本用法(苹果原生)

    一、NSURLConnection的常用类

    (1)NSURL:请求地址

    (2)NSURLRequest/NSMutableURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法、请求头、请求体....

    (3)NSURLConnection:负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据

    二、NSURLConnection的使用

    1、使用NSURLConnection发送请求的步骤

    (1)创建一个NSURL对象,设置请求路径(设置请求路径)

    (2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体(创建请求对象)

    (3)使用NSURLConnection发送NSURLRequest(发送请求)

     

    设置URL       NSString *urlStr = [NSString stringWithFormat:@"http://192.168.1.200:8080/MJServer/login?username=%@&pwd=%@", username, pwd];   
                         urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];      URL里有中文,需要转码 
                        NSURL *url = [NSURL URLWithString:urlStr];  //创建URL路径
    设置请求      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    创建请求,默认是get请求
     
    设置请求超时等待时间(超过这个时间就算超时,请求失败)  - (void)setTimeoutInterval:(NSTimeInterval)seconds;
     
    设置请求方法(比如GET和POST)  - (void)setHTTPMethod:(NSString *)method;
     
    设置请求体  - (void)setHTTPBody:(NSData *)data;
     
    设置请求头  - (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

    2、发送请求方式

    (1)同步请求(会一直等待服务器返回数据,这行代码会卡住,如果服务器没有返回数据,那么在主线程UI会卡住不能继续执行操作)

                 NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]

    (2)异步请求(block回掉方式)

                 NSOperationQueue *queue = [NSOperationQueue mainQueue];

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

                          if (data) {     必须价格判断,如果data为空,那么程序会崩溃(data不能为空)

                               // 当请求结束的时候调用 block(拿到了服务器的数据, 请求失败)

                          } }];

    (3)异步请求(NSURLConnectionDataDelegate方式)

             NSURLConnection *conn=[NSURLConnection connectionWithRequest:request delegate:self];

             [conn start]

    代理方法:

    请求失败:- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

    请求服务器响应:- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response

    请求接收数据(调用多次):- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

    请求数据接收完毕:- (void)connectionDidFinishLoading:(NSURLConnection *)connection

    block代码段:当服务器有返回数据的时候调用会开一条新的线程去发送请求,主线程继续往下走,当拿到服务器的返回数据的数据的时候再回调 block,执行block代码段。这种情况不会卡住主线程。
    队列的作用:决定这个block操作放在哪个线程执行?
    刷新UI界面的操作应该放在主线程执行,不能放在子线程,在子线程处理UI相关操作会出现一些莫名的问题。
    提示:
    (1)创建一个操作,放在NSOperation队列中执行,默认是异步执行的。
    (2)mainqueue   返回一个和主线程相关的队列,即主队列。
     
     

  • 相关阅读:
    【leetcode】7. 反转整数
    【leetcode】496. 下一个更大元素 I
    【leetcode】389. 找不同
    Linux驱动模型解析bus之platform bus
    shell 和进程
    递归调用在循环体内: 把循环展开, 这种情况是先循环再递归
    javascript函数柯里化以及柯里化带来的好处
    Maven测试篇
    关于ECharts Java类库的一个jquery插件
    javascript原型链继承
  • 原文地址:https://www.cnblogs.com/hepingqingfeng/p/5457761.html
Copyright © 2011-2022 走看看