我有一个NSMutableArray
包含7个互联网URLs
,我需要抓取HTTP
标题。
我正在使用这些方法建立asynchronous
连接(并且一切都很完美):
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
问题是我需要按照URL
的顺序下载每个NSMutableArray
,但由于asynchronous
连接的性质,订单会搞砸。
我不想使用synchronous
个连接,因为它们会阻止Main Thread.
如何使用GCD
上的Main Thread
建立队列,以确保下载将遵循包含7 {{1}的NSMutableArray
的0到6之间的索引顺序}}?
感谢您的帮助!
答案 0 :(得分:4)
你不需要GCD。您可以从第一次下载开始,然后在connectionDidFinishLoading
或didFailWithError
开始下一次下载。您只需要维护当前下载的索引,以便知道您是否已完成或下次启动下载。
以下只是这个想法的草图:
// Start the first download:
self.currentDownload = 0;
request = [NSURLRequest requestWithURL:[self.myURLArray objectAtIndex:0]];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
// and in connectionDidFinishLoading/didFailWithError:
self.currentDownload++;
if (self.currentDownload < self.myURLArray.count) {
request = [NSURLRequest requestWithURL:[self.myURLArray objectAtIndex:self.currentDownload]];
connection = [NSURLConnection connectionWithRequest:request delegate:self];
} else {
// All downloads finished.
}
答案 1 :(得分:1)
我认为其他解决方案相当不灵活,使用NSOperation可能会更好。可以在NSHipster和Apple's documentation找到一个很好的介绍。关于此主题还有几个Stack Overflow问题和this。