Add this to your understanding, and it took me a while to digest my head. Although he does not show how it works inside, it tells how it is implemented to work
In a multi-threaded application, notifications are always sent to the stream in which the notification was sent , which cannot be the same stream in which the observer registered himself.
Source: Apple Documentation
Thus, a notification can be registered in any stream, but the method associated with the notification starts in the stream on which the notification was sent, therefore, if we want to make any changes to the user interface, we send it to the main stream.
source share