UIKit не является поточно-безопасным. Все изменения пользовательского интерфейса (например, обновление UILabel.text или скрытие UIView) должны выполняться на главном потоке (main thread).
Попытка изменить UI из фонового потока приведет к ошибкам или непредсказуемому поведению приложения.
Для выполнения долгих или блокирующих операций (например, сетевых запросов, обработки изображений) следует использовать фоновые потоки (например, через DispatchQueue.global()) и затем возвращаться на главный поток для обновления UI, используя DispatchQueue.main.async.
Пример:
swift
Использование OperationQueue также позволяет управлять выполнением задач в фоновых потоках и указывать, какой поток использовать для завершающих операций.