zoukankan      html  css  js  c++  java
  • NSURLConnection-网络访问(同步异步)

    /********访问网络同步请求、异步请求基本概念********/
    //  访问网络的基本概念
    访问网络方式:
    同步请求 : 主线程执行 , 请求无法取消, 无法坚挺加载进度
    异步请求 : 多线程执行 , 请求可以取消, 可以监听
    
    //  访问网络的基本流程:(简略说明)
    构造NSURL实例(地址)
    生成NSURLRequest请求
    通过NSURLConnection发送请求
    通过返回NSURLRespond实例和NSError实例分析结果
    接受返回数据
    
    //  NSURL释义与常用方法
    NSURL实例包装了一个地址信息,可以是本地地址,也可以是远程地址
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com:8080/search?id=1"];
    
    /********NSURLRequest的使用********/
    //  NSURLRequest的使用
    NSURLRequest包装了网络请求的信息。
    NSURLRequest *request = [NSURLRequest requestWithURL:url
                                             cachePolicy:NSURLRequestUseProtocolCachePolicy
                                         timeoutInterval:60];
    NSURLRequestUseProtocolCachePolicy参考-> //
    http://www.cnblogs.com/pengyingh/articles/2343083.html
    
    //  NSMutableRequest的使用
    相对于NSRequest,可以对请求信息重新设置
    示例:
    NSMutableRequest *request [[NSMutableRequest alloc]init];
    [request setURL:url];
    //  设置请求方式get/post
    [request setHTTPMethod:@"POST"];
    //  设置超时时间
    [request setTimeoutInterval:60];
    //  设置请求参数
    [request setHTTPBody:_data];
    //  设置请求头
    [request setValue:@"tttt" forHTTPHeaderField:@"cookes"];
    
    /********同步请求用法********/
    //构造url
    NSURL *url = [NSURL URLWithString:@"http://www.iphonetrain.com"];
    //创建一个请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //响应
    NSURLResponse *response;
    //发送同步请求,请求成功后返回数据
    NSData *resultData = [NSURLConnection sendSynchronousRequest:request
                                               returningResponse:&response
                                                           error:nil];
    //  -------data转化为string------
    NSString *dataString = [[NSString alloc]initWithData:resultData
                                                encoding:NSUTF8StringEncoding];
    
    /********异步请求用法********/
    //  第一种方式(代理方式)
    //发送异步请求
    [NSURLConnection connectionWithRequest:request delegate:self];
    //delegate  接受加载的数据
    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
    {
        [_data appendData:data];
    }
    //delegate  数据加载完后调用
    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        NSString *dataString = [[NSString alloc]initWithData:_data
                                                    encoding:NSUTF8StringEncoding];
    }
    //  第二种方式(开辟一个子线程,结合创建多线程的多种方式)
    //启动一个新的线程加载数据
    [self performSelectorInBackground:@selector(loadData) withObject:nil];
    //loadData发送同步请求(发送一个普通的请求)
    - (void)loadData {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
        
        NSURL *url = [NSURL URLWithString:request_url];
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        //发送同步请求,获取数据data
        NSData *data = [NSURLConnection sendSynchronousRequest:request
                                             returningResponse:&response
                                                         error:nil];
        //回到主线程调用方法
        [self performSelectorOnMainThread:@selector(afterLoadData)
                               withObject:stringData
                             waitUntiDone:NO]; // 直到子线程任务完成
        [pool release];
    }
    
    /********取消异步请求********/
    //发送cancel取消请求,同步请求无法取消。
    //取消请求后,网络请求会按失败处理,会调用失败的代理
    [request cancel];
  • 相关阅读:
    Logging with PSR-3 to Improve Reusability
    php -- 取路径:getcwd()、__DIR__、__FILE__ 的区别
    默认网关和默认路由 —— Cisco CCNA – Default Gateway & Default Routes
    nginx rewrite only specific servername to https
    c语言中pthread的理解和使用
    socket bind 随机端口
    【转】php里面也可以使用协程
    【转】十个经典的C开源项目代码
    主机无法访问虚拟机上的elasticsearch服务器
    Ubuntu: an error occurred while mounting /mnt/hgfs
  • 原文地址:https://www.cnblogs.com/needly/p/3401040.html
Copyright © 2011-2022 走看看