NSOperationQueue
NSOperationQueue класс регулирует выполнение ряда NSOperation объекты. Будучи добавленным к очереди, работа остается в той очереди, пока это явно не отменяется или заканчивает выполнять свою задачу. Операции в очереди (но еще не выполняющийся) самостоятельно организованы согласно приоритетным уровням и зависимостям объекта взаимодействия и выполняются соответственно. Приложение может создать многократные очереди работы и представить операции любому из них.
Даже если те операции расположены в различных очередях работы, зависимости взаимодействия обеспечивают абсолютный порядок выполнения для операций. Объект операции не считают готовым выполниться, пока все его зависимые операции не закончили выполняться. Для операций, которые готовы выполниться, очередь работы всегда выполняет ту с самым высоким приоритетом относительно других готовых операций. Для получения дополнительной информации о том, как установить приоритетные уровни и зависимости, см. Ссылку класса NSOperation.
Вы не можете непосредственно удалить работу из очереди после того, как это было добавлено. Работа остается в ее очереди, пока она не сообщает, что закончена с ее задачей. Окончание его задачи не обязательно означает, что работа выполнила ту задачу к завершению. Работа может также быть отменена. Отмена объекта операции оставляет объект в очереди, но уведомляет объект, что это должно прервать свою задачу как можно быстрее. Для того, чтобы в настоящее время выполнить операции, это означает, что код работы объекта операции должен проверить состояние отмены, остановите то, что это делает, и отметьте себя, как закончено. Для операций, ставящихся в очередь, но еще выполнение, очередь должна все еще вызвать объект операции start метод так, чтобы это могло, обрабатывает событие отмены, и отметьте себя, как закончено.
Очереди работы обычно обеспечивают, потоки раньше выполняли их операции. Очереди работы используют libdispatch библиотека (также известный как Центральная Отгрузка) для инициирования выполнения их операций. В результате операции всегда выполняются на отдельном потоке, независимо от того, определяются ли они как асинхронные или синхронные операции.
Для получения дополнительной информации об использовании очередей работы см. Руководство по программированию Параллелизма.
KVO-совместимые свойства
NSOperationQueue класс является кодированием значения ключа (KVC) и совместимым наблюдением значения ключа (KVO). Можно наблюдать эти свойства, как желаемый управлять другими частями приложения. Для наблюдения свойств используйте следующие ключевые пути::
operations- только для чтенияoperationCount- только для чтенияmaxConcurrentOperationCount- читаемый и перезаписываемыйsuspended- читаемый и перезаписываемыйname- читаемый и перезаписываемый
Несмотря на то, что можно присоединить наблюдателей к этим свойствам, Вы не должны использовать привязку Какао для привязки их с элементами пользовательского интерфейса приложения. Код, связанный с Вашим пользовательским интерфейсом обычно, должен выполняться только в основном потоке Вашего приложения. Однако уведомления KVO, связанные с очередью работы, могут произойти в любом потоке.
Для получения дополнительной информации о наблюдении значения ключа и как присоединить наблюдателей к объекту, посмотрите, что Значение ключа Наблюдает Руководство по программированию.
Многожильные соображения
Безопасно использовать сингл NSOperationQueue объект от многократных потоков, не создавая дополнительные блокировки для синхронизации доступа к тому объекту.
Дополнительные способы поведения очереди работы
Очередь работы выполняет свои объекты операции с очередями на основе их приоритета и готовности. Если все объекты операции с очередями имеют тот же приоритет и готовы выполниться, когда они помещаются в очередь — т.е. их isReady возвраты метода YEStrue— они выполняются в порядке, в котором они были представлены очереди. Однако Вы никогда не должны полагаться на семантику очереди для обеспечения определенного порядка выполнения объектов операции. Изменения в готовности работы могут изменить получающийся порядок выполнения. При необходимости в операциях для выполнения в определенном порядке, используйте зависимости уровня работы, как определено NSOperation класс.
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.5 и позже.
-
Возвращает очередь работы, запустившую текущую работу.
Объявление
Swift
class func currentQueue() -> NSOperationQueue?Objective C
+ (NSOperationQueue *)currentQueueВозвращаемое значение
Очередь работы, запустившая работу или
nilесли не могла бы быть определена очередь.Обсуждение
Можно использовать этот метод из рабочего объекта операции для получения ссылки на очередь работы, запустившую его. Вызов этого метода извне контекста рабочей работы обычно приводит к
nilбыть возвращенным.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.6 и позже.
-
Возвращает очередь работы, связанную с основным потоком.
Объявление
Swift
class func mainQueue() -> NSOperationQueueObjective C
+ (NSOperationQueue *)mainQueueВозвращаемое значение
Очередь работы по умолчанию связала с основным потоком.
Обсуждение
Возвращенная очередь выполняет одну работу за один раз на основном потоке приложения. Выполнение операций на основном потоке чередовано с другими задачами, которые должны выполниться на основном потоке, таком как обслуживание событий и обновление пользовательского интерфейса приложения. Очередь выполняет те операции в общих режимах цикла выполнения, как представлено
NSRunLoopCommonModesпостоянный.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.6 и позже.
-
Добавляет указанный объект операции к получателю.
Объявление
Swift
func addOperation(_operation: NSOperation)Objective C
- (void)addOperation:(NSOperation *)operationПараметры
operationОбъект операции, который будет добавлен к очереди. В управляемых приложениях памяти этот объект сохраняется очередью работы. В собравших «мусор» приложениях очередь строго ссылается на объект операции.
Обсуждение
После того, как добавленный, указанное
operationостается в очереди, пока она не заканчивает выполняться.Объект операции может быть в самое большее одной очереди работы за один раз, и этот метод бросает
NSInvalidArgumentExceptionисключение, если работа уже находится в другой очереди. Точно так же этот метод бросаетNSInvalidArgumentExceptionисключение, если работа в настоящее время выполняет или уже закончила выполняться.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
cancel(NSOperation)isExecuting(NSOperation) -
Добавляет указанный массив операций очереди.
Объявление
Swift
func addOperations(_ops: [AnyObject], waitUntilFinishedwait: Bool)Objective C
- (void)addOperations:(NSArray *)opswaitUntilFinished:(BOOL)waitПараметры
opsМассив
NSOperationобъекты, которые Вы хотите добавить к получателю.waitЕсли
YEStrue, текущий поток блокируется, пока все указанные операции не заканчивают выполняться. ЕслиNOfalse, операции добавляются к очереди и сразу управляют возвратами к вызывающей стороне.Обсуждение
Объект операции может быть в самое большее одной очереди работы за один раз и не может быть добавлен, если это в настоящее время выполняется или законченное. Этот метод бросает
NSInvalidArgumentExceptionисключение, если какое-либо из тех состояний ошибки является истиной для какой-либо из операций вopsпараметр.После того, как добавленный, указанное
operationостается в очереди доisFinishedвозвраты методаYEStrue.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.6 и позже.
-
Обертывает указанный блок в объект операции и добавляет его к получателю.
Объявление
Swift
func addOperationWithBlock(_block: () -> Void)Objective C
- (void)addOperationWithBlock:(void (^)(void))blockПараметры
blockБлок для выполнения от объекта операции. Блок не должен брать параметры и не иметь никакого возвращаемого значения.
Обсуждение
Этот метод добавляет единственный блок к получателю первым обертыванием его в объекте операции. Вы не должны пытаться получить ссылку на недавно создаваемый объект операции или предугадать его информацию о типе.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.6 и позже.
См. также
cancel(NSOperation)isExecuting(NSOperation) -
Массив операций в настоящее время в очереди. (только для чтения)
Объявление
Swift
var operations: [AnyObject] { get }Objective C
@property(readonly, copy) NSArray *operationsОбсуждение
Массив в этом свойстве содержит нуль или больше
NSOperationобъекты в порядке, в котором они были добавлены к очереди. Этот порядок не обязательно отражает порядок, в котором будут выполняться те операции.Можно использовать это свойство для доступа к операциям, поставленным в очередь в любой данный момент. Операции остаются с очередями, пока они не заканчивают свою задачу. Поэтому массив может содержать операции, выполняющиеся или ожидающие, чтобы быть выполненными. Список может также содержать операции, выполнявшиеся, когда массив был первоначально получен, но впоследствии закончился.
Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроля
operationsключевой путь очереди работы.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.5 и позже.
-
operationCount operationCountСвойствоЧисло операций в настоящее время в очереди. (только для чтения)
Объявление
Swift
var operationCount: Int { get }Objective C
@property(readonly) NSUInteger operationCountОбсуждение
Поскольку число операций в изменениях очереди как те операции заканчивает выполняться, значение, возвращенное этим свойством, отражает мгновенное число операций в то время, когда к свойству получили доступ. К тому времени, когда Вы используете значение, фактическое число операций может отличаться. В результате не используйте это значение для объектных перечислений или других точных вычислений.
Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроля
operationCountключевой путь очереди работы.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.6 и позже.
-
Отмены все и выполняющиеся операции с очередями.
Объявление
Swift
func cancelAllOperations()Objective C
- (void)cancelAllOperationsОбсуждение
Это вызовы метода
cancelметод на всех операциях в настоящее время в очереди.Отмена операций автоматически не удаляет их из очереди или останавливает тех, которые в настоящее время выполняются. Для операций, ставящихся в очередь и выполнение ожидания, очередь должна все еще попытаться выполнить работу прежде, чем распознать, что это отменяется и перемещение его к законченному состоянию. Для операций, уже выполняющихся, сам объект операции должен проверить на отмену и остановить то, что это делает так, чтобы это могло переместиться в законченное состояние. В обоих случаях законченный (или отмененный) работе все еще дают шанс выполнить его блок завершения, прежде чем она будет удалена из очереди.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.5 и позже.
См. также
cancel(NSOperation) -
Блокирует текущий поток, пока все и выполняющиеся операции получателя с очередями не заканчивают выполняться.
Объявление
Swift
func waitUntilAllOperationsAreFinished()Objective C
- (void)waitUntilAllOperationsAreFinishedОбсуждение
Когда вызвано, этот метод блокирует текущий поток и ожидает текущих и операций получателя с очередями, чтобы закончить выполняться. В то время как текущий поток блокируется, получатель продолжает уже запускать поставленные в очередь операции и контролировать тех, которые выполняются. В это время текущий поток не может добавить операции к очереди, но другие потоки могут. Как только все незаконченные операции закончены, этот метод возвраты.
Если нет никаких операций в очереди, этот метод сразу возвращается.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.5 и позже.
-
qualityOfService qualityOfServiceСвойствоУровень обслуживания по умолчанию для применения к операциям выполнил использование очереди.
Объявление
Swift
var qualityOfService: NSQualityOfServiceObjective C
@property NSQualityOfService qualityOfServiceОбсуждение
Это свойство указывает, что уровень обслуживания применился к объектам операции, добавленным к очереди. Если объекту операции установили явный уровень обслуживания, то значение используется вместо этого. Значение по умолчанию этого свойства зависит от того, как Вы создали очередь. Для очередей Вы создаете себя, значение по умолчанию
NSOperationQualityOfServiceBackground. Для очереди, возвращеннойmainQueueметод, значение по умолчаниюNSOperationQualityOfServiceUserInteractiveи не может быть изменен.Уровни обслуживания влияют на приоритет, с которым объектам операции предоставляют доступ к системным ресурсам, таким как процессорное время, сетевые ресурсы, дисковые ресурсы, и т.д. Операциям с более высоким уровнем качества обслуживания отдают больший приоритет по системным ресурсам так, чтобы они могли выполнить свою задачу более быстро. Вы используете уровни обслуживания, чтобы гарантировать, что операциям, отвечающим на явные пользовательские запросы, дают приоритет над менее важной работой.
Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.10 и позже.
-
Максимальное количество операций с очередями, которые могут выполниться одновременно.
Объявление
Swift
var maxConcurrentOperationCount: IntObjective C
@property NSInteger maxConcurrentOperationCountОбсуждение
Значение в этом свойстве влияет только на операции, что у текущей очереди есть выполнение одновременно. Другие очереди работы могут также выполнить свое максимальное количество операций параллельно.
Сокращение количества параллельных операций не влияет ни на какие в настоящее время выполняющиеся операции. Указание значения
NSOperationQueueDefaultMaxConcurrentOperationCount(который рекомендуется), заставляет систему определять максимальный номер операций на основе системных условий.Значение по умолчанию этого свойства
NSOperationQueueDefaultMaxConcurrentOperationCount. Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроляmaxConcurrentOperationCountключевой путь очереди работы.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.5 и позже.
-
приостановленный приостановленныйСвойствоБулево значение, указывающее, планирует ли очередь активно операции для выполнения.
Объявление
Swift
var suspended: BoolObjective C
@property(getter=isSuspended) BOOL suspendedОбсуждение
Когда значение этого свойства
NOfalse, очередь активно запускает операции, которые находятся в очереди и готовы выполниться. Установка этого свойства кYEStrueпрепятствует тому, чтобы очередь запустила любые операции с очередями, но уже выполнить операции продолжают выполняться. Можно продолжать добавлять операции к очереди, временно отстраненной, но те операции не планируются для выполнения, пока Вы не измените это свойство наNOfalse.Операции удалены из очереди только, когда они заканчивают выполняться. Однако, чтобы закончить выполняться, работа должна сначала быть запущена. Поскольку временно отстраненная очередь не запускает новых операций, она не удаляет операций (включая отмененные операции), которые в настоящее время ставятся в очередь и не выполнение.
Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроля
suspendedключевой путь очереди работы.Значение по умолчанию этого свойства
NOfalse.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.10 и позже.
-
underlyingQueue underlyingQueueСвойствоОчередь отгрузки раньше выполняла операции.
Объявление
Swift
unowned(unsafe) var underlyingQueue: dispatch_queue_tObjective C
@property(assign) dispatch_queue_t underlyingQueueОбсуждение
Используйте это свойство для получения базовой очереди отгрузки, используемой для выполнения операций. Вы могли бы получить эту очередь в ситуациях, где Вы хотите вкрапить выполнение объектов операции и блоков на той же очереди.
Можно изменить значение этого свойства, если Вы уже имеете очередь отгрузки и хотите иметь очередь работы, подающую задачи той же очереди. Если
operationCountсвойство не 0, устанавливание значения этого свойства повышает исключение. Кроме того, новая очередь отгрузки не должна быть очередью отгрузки для основного потока. Новая очередь отгрузки использует уровень качества обслуживания, уже установленный для него; это не использует значение вqualityOfServiceсвойство.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.10 и позже.
-
Имя очереди работы.
Обсуждение
Имена обеспечивают способ для Вас идентифицировать Ваши очереди работы во время выполнения. Инструменты могут также использовать это имя для обеспечения дополнительного контекста во время отладки или анализа кода.
Значение по умолчанию этого свойства “
NSOperationQueue<ID>”, где <ID> адрес памяти очереди работы. Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроляnameключевой путь очереди работы.Оператор импорта
Objective C
@import Foundation;Swift
import FoundationДоступность
Доступный в OS X v10.6 и позже.
-
Постоянное указание числа поддерживаемых параллельных операций.
Объявление
Swift
var NSOperationQueueDefaultMaxConcurrentOperationCount: Int { get }Objective C
enum { NSOperationQueueDefaultMaxConcurrentOperationCount = -1 };Константы
