我目前正在构建一个需要连接到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调用进行特定的回调?选择器或块似乎是一种方法,但我不确定实现它的最佳方法。
答案 0 :(得分:1)
有几种方法可以实现这一目标。例如,您可以在NSOperation
/ NSOperationQueue
中执行网络请求。请注意,如果使用此方法,NSURLConnection
将需要在NSOperation
内同步执行 - 因为NSOperation
已经异步执行。每个网络下载请求都封装在NSOperation
中,而NSOperationQueue
又会提交给NSOperation
。
您可以使用NSOperation
查看example。
您可以通过提供{{1}}完成块来扩展上面的示例。
或者,您可以考虑使用第三方库,例如AFNetworking,它使用这种基于块的回调机制。