Ответ
Да, OperationQueue предоставляет API для управления очередями операций (NSOperation). Основные методы и свойства:
- Управление операциями:
addOperation(_:)– добавляет одну операцию.addOperations(_:waitUntilFinished:)– добавляет массив операций.cancelAllOperations()– отменяет все ожидающие и выполняющиеся операции.
- Конфигурация очереди:
maxConcurrentOperationCount– максимальное количество одновременно выполняемых операций. Значение по умолчанию (-1) позволяет системе определять оптимальное количество.qualityOfService– приоритет очереди (например,.userInitiated,.utility).isSuspended– приостанавливает запуск новых операций (уже выполняющиеся не затрагиваются).
- Состояние:
operationCount,operations.
Пример использования:
let processingQueue = OperationQueue()
processingQueue.maxConcurrentOperationCount = 2
processingQueue.qualityOfService = .userInitiated
let downloadOp = BlockOperation {
// Загрузка данных
print("Downloading...")
}
let parseOp = BlockOperation {
// Парсинг данных
print("Parsing...")
}
parseOp.addDependency(downloadOp) // Парсинг начнется только после загрузки
processingQueue.addOperations([downloadOp, parseOp], waitUntilFinished: false)