NSOperationQueue
NSOperationQueue
класс регулирует выполнение ряда NSOperation
объекты. Будучи добавленным к очереди, работа остается в той очереди, пока это явно не отменяется или заканчивает выполнять свою задачу. Операции в очереди (но еще не выполняющийся) самостоятельно организованы согласно приоритетным уровням и зависимостям объекта взаимодействия и выполняются соответственно. Приложение может создать многократные очереди работы и представить операции любому из них.
Даже если те операции расположены в различных очередях работы, зависимости взаимодействия обеспечивают абсолютный порядок выполнения для операций. Объект операции не считают готовым выполниться, пока все его зависимые операции не закончили выполняться. Для операций, которые готовы выполниться, очередь работы всегда выполняет ту с самым высоким приоритетом относительно других готовых операций. Для получения дополнительной информации о том, как установить приоритетные уровни и зависимости, см. Ссылку класса NSOperation.
Вы не можете непосредственно удалить работу из очереди после того, как это было добавлено. Работа остается в ее очереди, пока она не сообщает, что закончена с ее задачей. Окончание его задачи не обязательно означает, что работа выполнила ту задачу к завершению. Работа может также быть отменена. Отмена объекта операции оставляет объект в очереди, но уведомляет объект, что это должно прервать свою задачу как можно быстрее. Для того, чтобы в настоящее время выполнить операции, это означает, что код работы объекта операции должен проверить состояние отмены, остановите то, что это делает, и отметьте себя, как закончено. Для операций, ставящихся в очередь, но еще выполнение, очередь должна все еще вызвать объект операции start
метод так, чтобы это могло, обрабатывает событие отмены, и отметьте себя, как закончено.
Очереди работы обычно обеспечивают, потоки раньше выполняли их операции. Очереди работы используют libdispatch
библиотека (также известный как Центральная Отгрузка) для инициирования выполнения их операций. В результате операции всегда выполняются на отдельном потоке, независимо от того, определяются ли они как асинхронные или синхронные операции.
Для получения дополнительной информации об использовании очередей работы см. Руководство по программированию Параллелизма.
KVO-совместимые свойства
NSOperationQueue
класс является кодированием значения ключа (KVC) и совместимым наблюдением значения ключа (KVO). Можно наблюдать эти свойства, как желаемый управлять другими частями приложения. Для наблюдения свойств используйте следующие ключевые пути::
operations
- только для чтенияoperationCount
- только для чтенияmaxConcurrentOperationCount
- читаемый и перезаписываемыйsuspended
- читаемый и перезаписываемыйname
- читаемый и перезаписываемый
Несмотря на то, что можно присоединить наблюдателей к этим свойствам, Вы не должны использовать привязку Какао для привязки их с элементами пользовательского интерфейса приложения. Код, связанный с Вашим пользовательским интерфейсом обычно, должен выполняться только в основном потоке Вашего приложения. Однако уведомления KVO, связанные с очередью работы, могут произойти в любом потоке.
Для получения дополнительной информации о наблюдении значения ключа и как присоединить наблюдателей к объекту, посмотрите, что Значение ключа Наблюдает Руководство по программированию.
Многожильные соображения
Безопасно использовать сингл NSOperationQueue
объект от многократных потоков, не создавая дополнительные блокировки для синхронизации доступа к тому объекту.
Дополнительные способы поведения очереди работы
Очередь работы выполняет свои объекты операции с очередями на основе их приоритета и готовности. Если все объекты операции с очередями имеют тот же приоритет и готовы выполниться, когда они помещаются в очередь — т.е. их isReady
возвраты метода YES
true
— они выполняются в порядке, в котором они были представлены очереди. Однако Вы никогда не должны полагаться на семантику очереди для обеспечения определенного порядка выполнения объектов операции. Изменения в готовности работы могут изменить получающийся порядок выполнения. При необходимости в операциях для выполнения в определенном порядке, используйте зависимости уровня работы, как определено 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() -> NSOperationQueue
Objective 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 *)
ops
waitUntilFinished:(BOOL)wait
Параметры
ops
Массив
NSOperation
объекты, которые Вы хотите добавить к получателю.wait
Если
YES
true
, текущий поток блокируется, пока все указанные операции не заканчивают выполняться. ЕслиNO
false
, операции добавляются к очереди и сразу управляют возвратами к вызывающей стороне.Обсуждение
Объект операции может быть в самое большее одной очереди работы за один раз и не может быть добавлен, если это в настоящее время выполняется или законченное. Этот метод бросает
NSInvalidArgumentException
исключение, если какое-либо из тех состояний ошибки является истиной для какой-либо из операций вops
параметр.После того, как добавленный, указанное
operation
остается в очереди доisFinished
возвраты методаYES
true
.Оператор импорта
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: NSQualityOfService
Objective C
@property NSQualityOfService qualityOfService
Обсуждение
Это свойство указывает, что уровень обслуживания применился к объектам операции, добавленным к очереди. Если объекту операции установили явный уровень обслуживания, то значение используется вместо этого. Значение по умолчанию этого свойства зависит от того, как Вы создали очередь. Для очередей Вы создаете себя, значение по умолчанию
NSOperationQualityOfServiceBackground
. Для очереди, возвращеннойmainQueue
метод, значение по умолчаниюNSOperationQualityOfServiceUserInteractive
и не может быть изменен.Уровни обслуживания влияют на приоритет, с которым объектам операции предоставляют доступ к системным ресурсам, таким как процессорное время, сетевые ресурсы, дисковые ресурсы, и т.д. Операциям с более высоким уровнем качества обслуживания отдают больший приоритет по системным ресурсам так, чтобы они могли выполнить свою задачу более быстро. Вы используете уровни обслуживания, чтобы гарантировать, что операциям, отвечающим на явные пользовательские запросы, дают приоритет над менее важной работой.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
Максимальное количество операций с очередями, которые могут выполниться одновременно.
Объявление
Swift
var maxConcurrentOperationCount: Int
Objective C
@property NSInteger maxConcurrentOperationCount
Обсуждение
Значение в этом свойстве влияет только на операции, что у текущей очереди есть выполнение одновременно. Другие очереди работы могут также выполнить свое максимальное количество операций параллельно.
Сокращение количества параллельных операций не влияет ни на какие в настоящее время выполняющиеся операции. Указание значения
NSOperationQueueDefaultMaxConcurrentOperationCount
(который рекомендуется), заставляет систему определять максимальный номер операций на основе системных условий.Значение по умолчанию этого свойства
NSOperationQueueDefaultMaxConcurrentOperationCount
. Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроляmaxConcurrentOperationCount
ключевой путь очереди работы.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
-
приостановленный приостановленный
СвойствоБулево значение, указывающее, планирует ли очередь активно операции для выполнения.
Объявление
Swift
var suspended: Bool
Objective C
@property(getter=isSuspended) BOOL suspended
Обсуждение
Когда значение этого свойства
NO
false
, очередь активно запускает операции, которые находятся в очереди и готовы выполниться. Установка этого свойства кYES
true
препятствует тому, чтобы очередь запустила любые операции с очередями, но уже выполнить операции продолжают выполняться. Можно продолжать добавлять операции к очереди, временно отстраненной, но те операции не планируются для выполнения, пока Вы не измените это свойство наNO
false
.Операции удалены из очереди только, когда они заканчивают выполняться. Однако, чтобы закончить выполняться, работа должна сначала быть запущена. Поскольку временно отстраненная очередь не запускает новых операций, она не удаляет операций (включая отмененные операции), которые в настоящее время ставятся в очередь и не выполнение.
Можно наблюдать изменения к значению этого свойства с помощью наблюдения значения ключа. Сконфигурируйте наблюдателя для контроля
suspended
ключевой путь очереди работы.Значение по умолчанию этого свойства
NO
false
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
underlyingQueue underlyingQueue
СвойствоОчередь отгрузки раньше выполняла операции.
Объявление
Swift
unowned(unsafe) var underlyingQueue: dispatch_queue_t
Objective 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 };
Константы