您的位置:首页 > 理论基础 > 计算机网络

iOS 使用NSURLConnection简单代码实现网络访问

2015-06-17 15:50 597 查看
代码示例:
sendSynchronousRequest访问:

NSURL *url = [NSURL URLWithString:@"http://xxxooo"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];


>url:访问网络地址

>request 要装载的URL请求. 这个request 对象 作为初始化进程的一部分,被深度复制(deep-copied). 在这个方法返回之后, 再修改request, 将不会影响用在装载的过程中的request
>reponse 输出参数, 由服务器返回的URL响应
>输出参数, 如果在处理请求的过程中发生错误,就会使用. 无错误,就为NULL
此处用的是sendSynchronousRequest来访问的,此方法在主线程,网络缓慢会让UI卡死, 所以此方法不推荐,访问网络一定要在子线程中处理

// 发送一个同步请求(在主线程发送请求)
    // queue :存放completionHandler这个任务
    NSOperationQueue *queue = [NSOperationQueue mainQueue];
    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:
     ^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        // 这个block会在请求完毕的时候自动调用
        if (connectionError || data == nil) {
            //请求失败
            return;
        }
        
        // 解析服务器返回的JSON数据
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
        NSString *error = dict[@"error"];
        if (error) {
            //失败
        } else {
            //成功
        }
     }];


异步请求服务器返回结果会自动调用block内的代码,如果block的代码涉及到UI的刷新等,必须传入的队列queue为主队列,不然无法执行

服务器返回的数据为NSData类型,输出为很多16进制的值,所以必须进行解析才可获取内部数据
使用NSJSONSerialization进行解析,会返回NSDictionary类型的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: