我目前正在构建一个需要连接到API的iPhone应用程序。我构建了一个 API 类,该类发出异步 Web 请求并使用委托来获取响应(在主 UI 线程上(。它看起来像这样:
Api* api = [[Api alloc] init]
api.delegate = self;
[api request:@"foo/bar"]; // makes async API call via NSURLConnection
-(void) apiRespondedWith(id) response
{
// do stuff with API response.
}
这很好用,但我想在 ViewController 中发出多个 API 请求,并希望有一种更简单的方法来区分调用。有没有办法为每个 API 调用进行特定的回调?选择器或块似乎是执行此操作的一种方法,但我不确定实现此方法的最佳方法。
有几种方法可以实现此目的。 例如,您可以在NSOperation
/NSOperationQueue
中执行Web请求。 请注意,如果使用此方法,则需要在NSOperation
内同步执行NSURLConnection
- 因为NSOperation
已经在异步执行。 每个 Web 下载请求都封装在一个NSOperation
中,而又提交给NSOperationQueue
。
您可以查看使用 NSOperation
的示例。
您可以通过为NSOperation
提供完成块来扩展上面的示例。
或者,您可以考虑使用第三方库,例如AFNetworking,它使用这种基于块的回调机制。