Deciding Between RunLoop.main and the Main Thread with Combine in Swift

Difficult Choice

Steven Curtis
5 min readAug 5, 2024
Photo by Nathana Rebouças on Unsplash

I’ve understood for some time that in iOS development ensuring UI updates occur on the main thread is crucial. If you do not ensure UI updates occur on the main thread there may be a poor user experience, and ultimately there may be crashes for the user.

In this area there are two related but distinct concepts: Runloop.main and the main thread. When working with Combine and asynchronous events, understanding when to use RunLoop.main against the main thread (DispatchQueue.main) can ensure the correct UI behaviour and performance.

Let us explore this one.

Terminology:

RunLoop: A loop that waits for events (like user input, timers, or system messages) and dispatches them to the appropriate code for handling, keeping the program running and responsive.

RunLoop.main: The main run loop associated with the main thread, responsible for handling events and input sources, ensuring the app remains responsive and processes events like touch inputs and timers on the main thread.

Main Thread: The primary thread where all UI updates and interactions occur, ensuring thread safety for UI operations.

The Main Thread vs…

--

--