Understanding dispatch_async

asynchronous, dispatch-async, objective-c

Solution

The main reason you use the default queue over the main queue is to run tasks in the background.

For instance, if I am downloading a file from the internet and I want to update the user on the progress of the download, I will run the download in the priority default queue and update the UI in the main queue asynchronously.

dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
    //Background Thread
    dispatch_async(dispatch_get_main_queue(), ^(void){
        //Run UI Updates
    });
});

Problem

I have question around this code ``` dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL]; [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; }); ``` The first parameter of this code is ``` dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) ``` Are we asking this code to perform serial tasks on global queue whose definition itself is that it returns global concurrent queue of a given priority level? What is advantage of using `dispatch_get_global_queue` over the main queue? I am confused. Could you please help me to understand this better.

Original source