Tuesday, April 7, 2015

Usnig dispatch_apply with asyncronuos functions

Usually dispatch_apply is a synchronous function, which will pause the current thread, then execute the block and return to the paused thread. See the following example
Dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 );
dispatch_apply(10, queue, ^(size_t index) { 
NSLog(@"%zu", index); }); 
NSLog(@"done");
The results is as follows











But this is a synchronous execution. Assume you have a NSMutableArray and you need to perform some action for each of the object in array asynchronously in a separate thread, this is how to do it. Also since this is executed in a global dispatch queue, you cannot guarantee which block runs first.
//first get a  global dispatch queue
dispatch_queue_t queue = dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
//Then add an asynchronous block
dispatch_async(queue, ^{ 
 //inside this block, you can use dispatch_apply
dispatch_apply([array count], queue, ^(size_t index) { 
//your block code goes here.
}); 
//Now you block has finished. You can execute some other task here.
});

  For any query, feel free to contact me via my linkedin profile.