所以我正在浏览Stack Overflow以了解有效处理异步请求的方法。现在我正在使用ASIHTTPRequest,我的应用程序使用REST API,其中对单个资源的请求提示我请求5个或更多其他资源(链接资源)。
现在我在一个巨大的方法中做所有异步请求,可能有大约6个异步请求,每个都有他们的setCompletionBlock和setFailBlock。如果您使用过ASIHTTPRequest,则必须知道将采用多少重复代码。
无论如何,我似乎找到了一个解决方案,以确定是否所有请求都已完成此答案: Multiple asynchronous URL requests
但是,我不知道如何在代码中应用该答案,因为我之前没有使用过推送通知,而且我一直使用“self”作为委托,而不是其他类。
任何想法如何应用代码或更好的答案,你知道其他任何方法吗?
提前致谢!
答案 0 :(得分:5)
将所有请求放入ASINetworkQueue:http://allseeing-i.com/ASIHTTPRequest/How-to-use#about_ASINetworkQueues。
ASINetworkQueue有一个名为“queueDidFinishSelector”的回调。
答案 1 :(得分:3)
将GCD组与dispatch_group_wait一起使用。
示例:
__block NSMutableArray *imageURLList = [NSMutableArray array];
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
for (Helper *siteURL in list) {
dispatch_group_async(group, queue, ^{
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:siteURL]];
NSURLResponse *response;
NSError *error;
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if (urlData.length)
[imageURLList urlData];
});
}
dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
请注意,该块是异步执行的,因此可以使用sendSynchronousRequest:
。