Threading in Swift Simply Explained
Using Grand Central Dispatch (GCD) to speed up your app
Threading in iOS can be difficult to understand if you are coming from other platforms or are just a beginner at swift. Here’s a few tips to get you off on the right foot with Threading by using GCD.
First a precursor, threading is all about managing how work is prioritized in your app. Making your code execute faster is great, but what matters more how fast the user perceives your app to be.
Your goal as a developer is to prioritize anything that the user can see and interact with. It makes your app feel faster and snappier. Don’t make the user wait for something to load that they don’t notice or care about.
1. Only use the Main Thread for updating views
This is the easiest way to avoid issues. The basic idea is making sure that all views and interface elements are not blocked by other items in the Main Queue. A good example of this:
By only doing UI related work on the Main Thread you are ensuring that the user will not be blocked from loading a view or exiting a view. Avoid functions that have side effects that load data, image, etc on the Main Thread.
2. Know the different GCD Quality Of Service (QoS) types
There are a few different priorities to perform work in iOS. The higher qualities are prioritized first and are handled right away, whereas the lower qualities of service are handled when the system frees up some resources. Below is the different qualities ranked from highest to lowest.
Creating your own queue with quality of service is really easy. You just have to give a label and a QoS.
3. Know what thread you are on
To know what the current thread is at any give spot in your code,
With this you can see exactly what priority the function is running on. You can also check if you are specifically on the main thread with
4. Almost always use async
This is one of the easiest way to make a mistake when threading, but is also easily avoidable. There are benefits to using sync in your code, and some special cases require it, but for someone just beginning iOS development probably better to just avoid it.
NEVER call sync on the Main DispatchQueue like such:
Also avoid using the sync on
.userInteractive Queue because it is at the same priority level of the main queue.