2013-04-09 4 views
6

GCD позволяет отправлять блоки в очередь в соответствии с 4 глобальными очередями приоритетов (высокий, по умолчанию, низкий, фон). У меня есть несколько NSOperationQueues в моем приложении, но вы хотите запускать каждый в другом приоритете. Как я понял, NSOperationQueue является абстракцией над GCD и хотел бы установить разные приоритеты для NSOperationQueue (аналогично очередям приоритетов GCD). Есть ли способ сделать это? (нашел возможным установить приоритет для операции, но не для самой очереди).Устанавливает приоритет NSOperationQueue

ответ

1

Котировка от NSOperationQueue Class Reference.

Операция в пределах очереди (но еще не выполняется) сами по себе являются организованы в соответствии с уровнями приоритета и между эксплуатацией объектом зависимостей и выполняются соответствующим образом.

Зависимости между операциями обеспечивают абсолютный порядок выполнения для операций , даже если эти операции расположены в разных операционных очередях . Объект операции не считается готовым к выполнению , пока все его зависимые операции не завершили выполнение. Для операций, которые готовы к выполнению, операционная очередь всегда выполняет ту, которая имеет самый высокий приоритет относительно других готовых операций .

Это означает, что при проектировании вы не можете назначить приоритет очереди, но NSOperationQueue будет использовать глобальную очередь GCD для отдельных операций в зависимости от индивидуального уровня приоритета операции.

+0

no, NSOperationQueue использует только одну глобальную очередь GCD, приоритетную по умолчанию. Концепция приоритета NSOperation не связана. – das

+0

Я не утверждал, что он использует глобальную очередь GCD с разными уровнями приоритета. Я сказал и хотел сказать, что он выполняет задачи, которые зависят от индивидуального уровня приоритета работы. @das – svena

+0

ok, ваше упоминание о глобальных очередях GCD (множественное число) привело меня к этому впечатлению – das

-2

Попробуйте установить threadPriority на NSOperations, которые вы добавляете в очередь.

+1

устарел и только для OS X –

5

Начиная с iOS 8, NSOperationQueue имеет свойство qualityOfService, которое делает то, что, как я думаю, означает OP. Из Class Reference:

Это свойство определяет уровень обслуживания применительно к эксплуатации объектов добавляется в очередь. Если объект операции имеет явный сервис , это значение используется вместо этого. [...]

Уровни обслуживания влияют на приоритет, с которым объекты операций получают доступ к системным ресурсам, таким как время процессора, сетевые ресурсы, дисковые ресурсы и т. Д. Операциям с более высоким качеством обслуживания уровень получают больший приоритет по сравнению с системными ресурсами, поэтому могут выполнять свою задачу быстрее. Вы используете уровни обслуживания для обеспечения того, что операции, отвечающие на явные пользовательские запросы, даются с приоритетом за менее критическую работу.

Также в прошивке 8, вы можете изменить которые НОД очереди используются с underlyingQueue собственности, и, следовательно, выбрать глобальную очередь НОДА с нужным приоритетом.

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