В Swift есть несколько подходов для работы с потоками и асинхронными задачами. Вот ключевые методы:
1️⃣ Grand Central Dispatch (GCD) — DispatchQueue.
Позволяет легко выполнять код в фоне или на главном потоке.
// Фоновый поток
DispatchQueue.global().async {
// Тяжелые вычисления или сетевые запросы
DispatchQueue.main.async {
// Обновляем UI (только в главном потоке!)
}
}
2️⃣ Swift Concurrency (Task, async/await).
Современный способ для асинхронного кода.
Task {
// Асинхронная работа
let result = await networkRequest()
await MainActor.run {
// Обновляем UI (только в главном потоке!)
updateUI(with: result)
}
}
...
@MainActor
private func updateUI(with result: String) {
}3️⃣ OperationQueue.
Для сложных зависимостей между задачами.
let queue = OperationQueue()
queue.addOperation {
// Фоновая задача
}
⚠️ Важные правила:
🔸 UI-обновления: только в главном потоке (DispatchQueue.main),
@MainActor.🔸 Глобальные очереди (global()): для CPU-интенсивных задач.
🔸 Асинхронность (async): чтобы не блокировать текущий поток.
🤔 Когда что использовать?
🔹 DispatchQueue: для простых фоновых задач.
🔹 Task: для современного асинхронного кода (с async/await).
🔹 OperationQueue: для сложных цепочек операций.
💡 Вывод:
Выбирайте инструмент под задачу, но всегда помните о потокобезопасности!
➡️ Подписаться на канал
Мобильный трудоголик