开发者

iOS Handling Multiple Asynchronous Requests: Send a Signal When All Requests Are Finished

So I am browsing over Stack Overflow for ways to handle asynchronous requests effectively. Right now I am using ASIHTTPRequest and my application consumes a REST API, in which a request to a single resource prompts me to request 5 or more additional resources (linked resources).

Right now I am doing all asynchronous request inside one huge method, there may be around 6 asynchronous re开发者_开发知识库quest each with their setCompletionBlock and setFailBlock. If you have used ASIHTTPRequest, you must have an idea of how much repetitive code that will take.

Anyway, I seem to have found a solution to determine if all requests are finished with this answer: Multiple asynchronous URL requests

however, I don't know how to apply that answer in code ,as I have not used push notifications before and I have always used "self" as delegats and never other classes.

Any ideas how I can apply the answer to code or better yet, do you know of any other methods?

Thanks in advance!


Put all the requests into an ASINetworkQueue: http://allseeing-i.com/ASIHTTPRequest/How-to-use#about_ASINetworkQueues.

ASINetworkQueue has a callback called "queueDidFinishSelector".


Use a GCD group with dispatch_group_wait.

Example:

__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);

Note that the block is executed async so it is alright to use sendSynchronousRequest:.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜