3

我看到了几个关于在 iOS 中发出 JSON 请求的教程,其中许多使用 NSURLConnection 列出了类似这样的内容:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [self.responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog([NSString stringWithFormat:@"Connection failed: %@", [error description]]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {}

但是我今天读了另一个教程(http://mobile.tutsplus.com/tutorials/iphone/ios-quick-tip-interacting-with-web-services/),它有这个非常简单的实现:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, ^{
    NSError *error = nil;
    NSURL *url = [NSURL URLWithString:@"http://brandontreb.com/apps/pocket-mud-pro/promo.json"];
    NSString *json = [NSString stringWithContentsOfURL:url
                                              encoding:NSASCIIStringEncoding
                                                 error:&error];
    NSLog(@"\nJSON: %@ \n Error: %@", json, error);
});

哪个更好用?后者的简单性是否存在固有的错误?

4

2 回答 2

7

使用没有任何“错误”,stringWithContentsOfURL:encoding:error:但您在如何处理正在进行的请求方面没有灵活性。如果您需要执行以下任何操作,那么我会使用NSURLConnection

  1. 在请求期间向用户显示完成百分比
  2. 向需要 HTTP 身份验证的主机执行请求
  3. 更复杂的数据处理(例如,从 Web 服务下载比典型 JSON 响应更多的数据),您可能希望以块的形式处理响应
  4. 取消请求(感谢@martin)
于 2013-03-23T20:21:31.107 回答
1

使用第一个。您有一个方法可以告诉您连接何时完成,然后您可以执行另一种方法来显示数据或您打算对其进行的任何操作。

于 2013-03-23T20:20:18.037 回答