Вы, вероятно, не должны использовать отдельные очереди операций.Поскольку это все операции с облачными файлами, у вас должна быть одна очередь операций с облачными файлами, выполняющая все операции с облачными файлами.
Если операции не зависят от других операций, вы просто добавляете их в эту очередь, и они выполняютсяв любом порядке и столько, сколько система считает полезной.Конечно, вы можете установить maxConcurrentOperationCount
, чтобы установить свой собственный предел, если вы считаете, что это хорошая идея, но вам это не нужно, и в этом случае система решит за вас.
ВОперации case зависят друг от друга, вы используете систему зависимости операций.Для этого сначала создайте операции, а затем используйте addDependency
, чтобы сообщить системе, какая операция зависит от какой другой операции.Если вы теперь добавите все эти операции в очередь, система обязательно выполнит их в правильном порядке, так что операция будет выполняться только после того, как все операции, от которых она зависит, будут завершены (и они могут снова зависеть от других операций и т. Д.).на).Просто убедитесь, что не созданы циклические зависимости (OpA зависит от OpB, который зависит от OpC, который зависит от OpA), так как тогда ни один из них никогда не будет работать.
Но, чтобы ответить на вопрос в целом, в случае, если другие пользователиспросите, как вы можете смоделировать dispatch_sync
с NSOperationQueue
:
NSOperationQueue * queue = ...;
NSOperation * someOperation = [NSBlockOperation
blockOperationWithBlock:^{
// ... do whatever you want to do ...
}
];
[queue addOperation:someOperation];
[someOperation waitUntilFinished];
Обратите внимание, однако, что это гораздо менее эффективно, чем вызов dispatch_sync
в очереди последовательной отправки, поскольку приведенный выше код всегда вызывает переключение двух потоковв то время как вызов dispatch_sync
в очереди последовательной отправки повторно использует вызывающий поток для запуска блока, и, таким образом, переключение потока вообще не будет происходить, и процессу не потребуется второй поток для этого. Подробнее о том, как это работает, см. Здесь .