如何使使用GCD的NSURLRequest的队列?(How to make a queue of N

2019-10-17 04:10发布

我有一个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.

如何使使用队列GCDMain Thread ,以确保下载将遵循指数从0为了我的6 NSMutableArray含有7个URLs

谢谢你的帮助!

Answer 1:

你不需要GCD了点。 您可以先下载开始,在connectionDidFinishLoadingdidFailWithError开始下下载。 你只需要保持当前下载的索引,让你知道,如果你是成品或明年要启动的下载。

以下只是这种想法的草图:

// 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.
}


Answer 2:

我觉得其他的解决方案是相当死板,它可能是更好的做到这一点使用的NSOperation。 一个很好的介绍吧上可以找到NSHipster和Apple的文档 。 有很多跟这个话题和几个堆栈溢出的问题这个 。



文章来源: How to make a queue of NSURLRequest using GCD?