Concurrency is a tough topic. Learn about Grand Central Dispatch in-depth in this two part tutorial series.
This is a companion discussion topic for the original entry at https://www.raywenderlich.com/2457-grand-central-dispatch-in-depth-part-1-2
Concurrency is a tough topic. Learn about Grand Central Dispatch in-depth in this two part tutorial series.
In this part of the code
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ // 1
UIImage *overlayImage = [self faceOverlayImageFromImage:_image]; // Download
dispatch_async(dispatch_get_main_queue(), ^{ // 2
[self fadeInNewImage:overlayImage]; // 3
});
});
The queue DISPATCH_QUEUE_PRIORITY_HIGH is concurrent queue, so why does the // Download line waits till download is done to update the UI? the dispatch_async // 2 may start right after // Download line isn’t it?
dispatch_async(queue, block1);
dispatch_async(queue, block2);
dispatch_async(queue, block3);
block1, block2 and block3 are executed concurrently.
Lines in that blocks (such as // Download and // 2) are executed serially. There is no concurrency inside blocks.
To compile starter project you should add few lines in GooglyPuff-info.plist:
This tutorial is more than six months old so questions are no longer supported at the moment for it. We will update it as soon as possible. Thank you! :]