2015-05-07 2 views
2

Я хотел реализовать последовательную очередь с NSOperationQueue. Поэтому я установил maxConcurrentOperationCount = 1 для моего NSOperationQueue. Итак, пара вопросов сейчасNSOperation и NSOperationQueue с maxConcurrentOperationCount = 1

Теперь мне еще нужно установить concurrent to YES в подкласс NSOperation, чтобы сделать его серийным?

Если я устанавливаю одновременно YES для NSOperation, хотя maxConcurrentOperationCount равен 1, возможно ли, что я могу иметь 2 или более NSOperations, работающих параллельно?

ответ

3

Основываясь на том, как я прочитал Apple's documentation, свойство concurrent в NSOperation является только readonly и сообщает нам, будет ли операция выполняться асинхронно или нет. Если вы планируете вручную запускать операции, вам нужно вернуть свой NSOperation YES для asynchronous, чтобы избежать блокировки потока, с которого вы начинаете свои операции. Свойство concurrent используется только для контроля за состоянием работы, если вы работаете их вручную

Если вы добавляете ваши NSOperation к NSOperationQueue, очередь будет игнорировать значение asynchronous собственности и выполнения операций в соответствии с maxConcurrentOperationCount.

Таким образом, чтобы ответить на ваш вопрос: Если вы запускаете все операции вручную и установите asynchronous в YES, количество операций, работающих параллельно будет зависеть от того, насколько велика задержка между каждый раз, когда вы звоните start на своих операциях, и сколько времени потребуется, чтобы закончить их. Если вы добавите их в очередь, ваша очередь будет запускать операции один за другим, как очередную очередь.

0

Короткий ответ НЕТ, если вы используете NSOperationQueue, вам не нужно устанавливать asynchronous или проверить concurrent. Если они добавляются в очередь, применяются правила очереди. Поэтому, если вы установили maxConcurrentOperationCount = 1, вы получите очередную очередь.

Смежные вопросы