Skip to main content

How to update two images using GCD in swift




If you are IOS developer you can run into a problem when your app download a lot of image from URL maybe your app is crashed or you can't interact with the rest of the application, when I interviewed for a job  a few months ago, I also got this question from my interviewer  
He assumed that there are 3 images from URL when user click on the update button all of them will be updated at  the same time so let’s do it a demo to know what happens when your application run without multithreading  
Inside of my project I need  some element into ViewController, 
As you can see we have 2 images and a button to update our image 

Inside of ViewController, we need to hook up all of them with  @IBOutlet and @IBAction it should look like this 


As you can see when user click on the update button to download two images from URL, you can't interact with the rest of the application you can’t do anything with the update button 
So how to deal with that problem “Apple provides GCD can help us deal with that problem” Grand Central Dispatch or GCD is a low-level API for managing concurrent operations. It will make your application smooth and more responsive. Also helps for improving application performance. Sometimes we are trying to perform multiple tasks at the same time that time most of the developer-facing application hang or freezing issue this is the common issue. That’s why we are using GCD to manage multiple tasks at the same time.
So how to use GDC inside of our project, we’re going to  create a new function look like this 




And  we need to create another function can help us load two images from URL  


After that  we can create a new function look like this, this function can notify when we get image from URL 




Finally, inside the update button we put two URL into loadimage function as well as we need to say dispatchGroup.notify if the image is loaded sucessfully, this method is called 



What’s Queues
Multithreading is mostly about “queues” in iOS.
Functions (usually closures) are simply lined up in a queue (like at the movies!).
Then those functions are pulled off the queue and executed on an associated thread(s). Queues can be “serial” (one closure a time) or “concurrent” (multiple threads servicing it) 
Queues are following the FIFO pattern (First In, First Out), meaning that the queues  first, it will be executed first and also finish first 


Main Queues
There is a very special serial queue called the “main queue.”
All UI activity MUST occur on this queue and this queue only.
And, conversely, non-UI activity that is at all time consuming must NOT occur on that queue. We do this because we want our UI to be highly responsive!
And also because we want things that happen in the UI to happen predictably (serially). Functions are pulled off and worked on in the main queue only when it is “quiet”.
Global Queues
For non-main-queue work, you’re usually going to use a shared, global, concurrent queue.


List of DispatchQueue Priority 


DispatchQoS.userInteractive : high priority, only do something short and quick DispatchQoS.userInitiated : high priority, but might take a little bit of time
DispatchQoS.background :not directly initiated by user, so can run as slow as needed
DispatchQoS.utility: long-running background processes, low priority


Serial
It’s executing one task at a time 
What’s different Sync & Async 
Sync when a work item is executed synchronously with sync method, the program waits until execution finishes before the method call returns 

Async - execute asynchronously with the async method, the method call immediately

Conclusion

I hope you figure out when you read this article please leave your comment below this article if you have any advice for me
I have referenced document CS193p Stanford University








Comments

Popular posts from this blog

When is viewWillAppear, viewDidAppear, viewDidLoad, viewWillDisappear actually called

A few months ago I decided to apply for a job at a software company, I interviewed for IOS developer position. After a week I got a result they  gave me an offer 400$ per months, salary not too high, not too low for me  I also  struggled with a lot of questions from my interviewer, so today in this article I will share with you my experiment to answer the question from the interviewer  if you are  IOS developer you are familiar with  viewWillAppear , viewDidAppear , viewDidLoad , viewWillDisappear , and viewDidDisappear  let me ask you a question what is the running order of viewDidAppear , viewDidLoad , viewWillDisappear , and viewDidDisappear. This question sounds easy it’s straightforward. Actually, it very hard to answer, because when you make app maybe you don't care about it , No one tells you before you get an interview ,  now we need to create a new project, inside of ViewController.swift  we need to implement some method...

Build Carousel Effect in iOS with Swift Kien Pham

This tutorial I’m going to show you how to build Carousel effect it is the most common, you can see it everywhere you can see it on Instagram or App Store which is beautiful UI you can use a lot of in your app many places  that you want to show beautiful text and beautiful image view First thing first we need to create a new project and select iOS->SingleView Application Product Name: Tableview – this the name of your project ·      Company Identifier: KienPhamDev It’s actually the domain name written the other way round. if  you have a domain, you can use your own domain name otherwise you may use mine or just fill in ·      Device family: you can choose universal it’s not important ·      Choose swift as Language And then we are going to the main storyboard , in this tutorial we want to use ViewController so we just need to drag a new Collection View from Object library ...