我有一个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
,以确保下载将遵循指数从0为了我的6 NSMutableArray
含有7个URLs
?
谢谢你的帮助!
你不需要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.
}
我觉得其他的解决方案是相当死板,它可能是更好的做到这一点使用的NSOperation。 一个很好的介绍吧上可以找到NSHipster和Apple的文档 。 有很多跟这个话题和几个堆栈溢出的问题这个 。