http:nsurlconnection同步与异步

NSUrlConnection有同步和异步请求http链接的方法。

///http NSURLConnection sendAsynchronousRequest
- (void)httpAsynchronousRequest{
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSString *post = @"postData";
    NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:postData];
    [request setTimeoutInterval:10.0];
    NSOperationQueue *queue = [[NSOperationQueue alloc]init];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:queue
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                               if (connectionError) {
                                   NSLog(@"Httperror:%@ %ld", connectionError.localizedDescription, (long)connectionError.code);
                               }else {
                                   NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];
                                   NSString *responseString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
                                   NSLog(@"HttpResponseCode %ld", (long)responseCode);
                                   NSLog(@"HttpResponseBody %@", responseString);
                               }
                           }];
}
///http NSURLConnection connectionWithRequest
- (void)httpConnectionWithRequest{
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [NSURLConnection connectionWithRequest:request delegate:self];
}
///DEBUGGING
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
    NSInteger responseCode = [(NSHTTPURLResponse *)response statusCode];
    NSLog(@"response length = %lld statusCode %ld", [response expectedContentLength], responseCode);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
    if (_myData == nil) {
        _myData = [[NSMutableData alloc]initWithData:data];
    }else{
        [self.myData appendData:data];
        NSLog(@"appendData");
    }
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{
    NSLog(@"response error: %@", [error localizedFailureReason]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
    NSString *responseString = [[NSString alloc]initWithData:self.myData encoding:NSUTF8StringEncoding];
    NSLog(@"response body %@", responseString);
}
///NSURLConnection sendSynchronousRequest
- (void)httpSynchronousRequest {
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]];
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest
                                         returningResponse:&response
                                                     error:&error];
    if (error == nil) {
        NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"response data: %@", str);
    }
}

ps:异步请求不会阻塞线程,程序继续往下执行,请求完成会执行回调函数或者执行block。同步请求会阻塞线程,直到请求完成,继续往下执行,多用于少量数据的请求,或者接下来需要用到请求来的数据的情况下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值