我认为使用同步NSURLConnection API是一个好主意。你有其他几个选择。一种方法是在NSURLConnection周围编写一个使用异步NSURLConnection API的包装器对象,以便获得异步API回调提供的良好信息,包括下载进度,在请求发生时您可以轻松地继续更新UI,但是提出了自己的同步方法来做你需要做的任何事情。从本质上讲,是这样的:
@implementation MyURLConnectionWrapper
- (BOOL)sendRequestWithError:(NSError **)error
{
error = error ? error : &(NSError *){ nil };
self.finishedLoading = NO;
self.connectionError = nil;
self.urlConnection = [][NSURLConnection alloc] init...]
while (!self.finishedLoading)
{
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate: [NSDate distantFuture]];
}
if (self.connectionError != nil)
{
*error = self.connectionError;
return NO;
}
return YES;
}
@end
(这是所有类型的过我的头顶,并被大量缩写,但应该给你的基本思想。)
你也可以做类似的断火在完成委托方法每个请求的前一,放弃使用完全串行调度队列:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
{
[self sendNextRequest];
}
无论哪种方式,你需要考虑如何适当处理连接错误。我在不同的地方都使用了两种方法,取得了很好的成功
感谢(安德鲁马德森和Xjones)为您的快速回复。这听起来像是一个同步呼叫将为我工作。 (我希望避免这种情况以及随之而来的额外维护工作。)关于端到端链接呼叫,这是可能的,但我不确定在我的情况下它是否值得。而不是管理一个调度队列,它会让我管理一个日期队列。我认为设置同步呼叫会更简单。 – 2011-12-29 00:48:34