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