Ответ
Режимы Run Loop — это механизм фильтрации, который определяет, какие источники событий (sources), таймеры (timers) и наблюдатели (observers) должны обрабатываться в текущей итерации цикла.
Основные режимы:
NSDefaultRunLoopMode(.default) — стандартный режим для большинства операций.UITrackingRunLoopMode(.tracking) — активируется при взаимодействии с UI (скроллинг, перетаскивание). Таймеры, добавленные только в.default, в этом режиме не выполняются.NSRunLoopCommonModes(.common) — не отдельный режим, а набор режимов (обычно включает.defaultи.tracking). Источники, добавленные в.common, работают во всех режимах этого набора.
Практический пример:
// Таймер, который будет работать даже во время скролла
let timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { _ in
print("Timer fired")
}
RunLoop.current.add(timer, forMode: .common)
Ключевой момент: Использование режимов позволяет приоритизировать обработку событий. Например, во время скролла UI остаётся отзывчивым, потому что Run Loop в режиме .tracking обрабатывает только события, связанные с отслеживанием. Для фоновых задач предпочтительнее использовать DispatchQueue или OperationQueue.