NSOperation
NSOperation
класс является абстрактным классом, который Вы используете для инкапсуляции кода и данных, связанных с единственной задачей. Поскольку это абстрактно, Вы не используете этот класс непосредственно, но вместо этого разделяете на подклассы или используете один из определенных с помощью системы подклассов (NSInvocationOperation
или NSBlockOperation
) выполнять фактическую задачу. Несмотря на то, чтобы быть абстрактным, базовое внедрение NSOperation
действительно включает значительную логику для координирования безопасного выполнения задачи. Присутствие этой встроенной логики позволяет, для фокусирований на фактической реализации задачи, а не на коде связующего звена необходимо было гарантировать, что это работает правильно с другими системными объектами.
Объект операции является однократным объектом — т.е. он выполняет свою задачу один раз и не может использоваться для выполнения его снова. Вы обычно выполняете операции путем добавления их к очереди работы (экземпляр NSOperationQueue
класс). Очередь работы выполняет свои операции или непосредственно путем выполнения их на вторичных потоках, или косвенно использования libdispatch
библиотека (также известный как Центральная Отгрузка). Для получения дополнительной информации о том, как очереди выполняют операции, посмотрите Ссылку класса NSOperationQueue.
Если Вы не хотите использовать очередь работы, можно выполнить работу сами путем вызова start
метод непосредственно от Вашего кода. Выполнение операций вручную помещает больше нагрузки на Ваш код, потому что запуск работы, которая не находится в состоянии готовности, инициировал исключение. ready
свойство сообщает относительно готовности работы.
Зависимости от работы
Зависимости являются удобным способом выполнить операции в определенном порядке. Можно добавить и удалить зависимости для работы с помощью addDependency:
и removeDependency:
методы. По умолчанию объект операции, имеющий зависимости, не считают готовым, пока все его зависимые объекты операции не закончили выполняться. Как только последняя зависимая работа заканчивается, однако, объект операции становится готовым и способным выполниться.
Зависимости, поддерживаемые NSOperation
не сделайте различие о том, закончилась ли зависимая работа успешно или неуспешно. (Другими словами, отменение работы так же отмечает его, как закончено.) Вам решать, чтобы определить, должна ли работа с зависимостями продолжиться в случаях, где ее зависимые операции были отменены или не выполняли свою задачу успешно. Это может потребовать, чтобы Вы включили некоторую дополнительную ошибку при отслеживании возможностей в объекты операции.
KVO-совместимые свойства
NSOperation
класс является кодированием значения ключа (KVC) и наблюдением значения ключа (KVO), совместимым для нескольких из его свойств. По мере необходимости можно наблюдать, что эти свойства управляют другими частями приложения. Для наблюдения свойств используйте следующие ключевые пути:
isCancelled
- только для чтенияisAsynchronous
- только для чтенияisExecuting
- только для чтенияisFinished
- только для чтенияisReady
- только для чтенияdependencies
- только для чтенияqueuePriority
- читаемый и перезаписываемыйcompletionBlock
- читаемый и перезаписываемый
Несмотря на то, что можно присоединить наблюдателей к этим свойствам, Вы не должны использовать привязку Какао для привязки их с элементами пользовательского интерфейса приложения. Код, связанный с Вашим пользовательским интерфейсом обычно, должен выполняться только в основном потоке Вашего приложения. Поскольку работа может выполниться в любом потоке, уведомления KVO, связанные с той работой, могут так же произойти в любом потоке.
При обеспечении пользовательских реализаций для какого-либо из предыдущих свойств реализации должны поддержать KVC и соответствие KVO. Если Вы определяете дополнительные свойства для Вашего NSOperation
объекты, рекомендуется сделать те свойства KVC и KVO совместимыми также. Для получения информации о том, как поддерживать кодирование значения ключа, посмотрите, что Значение ключа Кодирует Руководство по программированию. Для получения информации о том, как поддерживать наблюдение значения ключа, посмотрите, что Значение ключа Наблюдает Руководство по программированию.
Многожильные соображения
NSOperation
класс самостоятельно многожильный знающий. Поэтому безопасно вызвать методы NSOperation
объект от многократных потоков, не создавая дополнительные блокировки для синхронизации доступа к объекту. Это поведение необходимо, потому что работа обычно работает в отдельном потоке от того, создавшего и контролирующего его.
Когда Вы разделяете на подклассы NSOperation
, необходимо удостовериться, что любые переопределенные методы остаются безопасными вызвать от многократных потоков. При реализации пользовательских методов в подклассе, таких как пользовательские средства доступа данных, необходимо также удостовериться, что те методы ориентированы на многопотоковое исполнение. Таким образом доступ к любым переменным данных в работе должен синхронизироваться для предотвращения потенциального повреждения данных. Для получения дополнительной информации о синхронизации, см. Руководство по программированию Поточной обработки.
Асинхронный по сравнению с синхронными операциями
Если Вы планируете выполнение объекта операции вручную, вместо того, чтобы добавить его к очереди, можно разработать работу для выполнения синхронным или асинхронным способом. Объекты операции синхронны по умолчанию. В синхронной работе объект операции не создает отдельный поток, на котором можно выполнить его задачу. Когда Вы вызываете start
метод синхронной работы непосредственно от Вашего кода, работа сразу выполняется в текущем потоке. К этому времени start
метод такого объектного управления возвратами к вызывающей стороне, сама задача завершена.
Когда Вы вызываете start
метод асинхронной работы, тот метод может возвратиться, прежде чем соответствующая задача выполнена. Асинхронный объект операции ответственен за планирование его задачи на отдельном потоке. Работа могла сделать это путем начинания новой дискуссии непосредственно путем вызова асинхронного метода, или путем представления блока очереди отгрузки для выполнения. Фактически не имеет значения, если работа является продолжающейся, когда управление возвращается к вызывающей стороне, только что это могло быть продолжающимся.
Если Вы всегда планируете использовать очереди для выполнения операций, более просто определить их как синхронных. При выполнении операций вручную, тем не менее, Вы могли бы хотеть определить свои объекты операции как асинхронные. Определение асинхронной работы требует большего количества работы, потому что необходимо контролировать продолжающееся состояние задачи и изменений отчета в том состоянии с помощью уведомлений KVO. Но определение асинхронных операций полезно в случаях, где Вы хотите гарантировать, что вручную выполняемая работа не блокирует вызывающий поток.
Когда Вы добавляете работу к очереди работы, очередь игнорирует значение asynchronous
свойство и всегда вызывает start
метод от отдельного потока. Поэтому, если Вы всегда выполняете операции путем добавления их к очереди работы, нет никакой причины сделать их асинхронными.
Для получения информации о том, как определить и синхронные и асинхронные операции, посмотрите примечания разделения на подклассы.
Разделение на подклассы примечаний
NSOperation
класс обеспечивает основную логику для отслеживания режима выполнения работы, но иначе должен быть разделен на подклассы для выполнения любой реальной работы. То, как Вы создаете свой подкласс, зависит от того, разработана ли Ваша работа для выполнения одновременно или неодновременно.
Методы для переопределения
Для непараллельных операций Вы обычно переопределяете только один метод:
В этот метод Вы помещаете, код должен был выполнить данную задачу. Конечно, необходимо также определить пользовательский метод инициализации, чтобы упростить создавать экземпляры пользовательского класса. Вы могли бы также хотеть определить методы получателя и методы установщика получить доступ к данным от работы. Однако при определении пользовательского метода get и методов установщика необходимо удостовериться, что те методы можно вызвать безопасно от многократных потоков.
При создании параллельной работы необходимо переопределить следующие методы и свойства как минимум:
В параллельной работе, Вашем start
метод ответственен за запуск работы асинхронным способом. Порождаете ли Вы поток или вызываете асинхронную функцию, Вы делаете это от этого метода. После запуска работы, Вашего start
метод должен также обновить режим выполнения работы, как сообщается executing
свойство. Вы делаете это путем отсылки уведомлений KVO для executing
ключевой путь, позволяющий заинтересованным клиентам знать, что теперь работает работа. Ваш executing
свойство должно также обеспечить состояние ориентированным на многопотоковое исполнение способом.
После завершения или отмены его задачи, Ваш параллельный объект операции должен генерировать уведомления KVO для обоих isExecuting
и isFinished
ключ соединяет каналом для маркировки заключительного изменения состояния для работы. (В случае отмены все еще важно обновить isFinished
ключевой путь, даже если работа не полностью заканчивала свою задачу. Операции с очередями должны сообщить, что они закончены, прежде чем они смогут быть удалены из очереди.) В дополнение к генерации уведомлений KVO, Ваших переопределений executing
и finished
свойства должны также продолжать сообщать о точных значениях на основе состояния Вашей работы.
Для получения дополнительной информации и руководства о том, как определить параллельные операции, см. Руководство по программированию Параллелизма.
Даже для параллельных операций, должно быть мало потребности к переопределенным методам кроме описанных выше. Однако при настройке функций зависимости операций Вам, возможно, придется переопределить дополнительные методы и обеспечить дополнительные уведомления KVO. В случае зависимостей это, вероятно, только потребовало бы обеспечения уведомлений для isReady
ключевой путь. Поскольку dependencies
свойство содержит список зависимых операций, изменения в нем уже обрабатываются значением по умолчанию NSOperation
класс.
Поддержание состояний объекта операции
Объекты операции поддерживают информацию состояния внутренне для определения, когда безопасно выполниться и также уведомить внешние клиенты прогрессии через жизненный цикл работы. Ваши пользовательские подклассы должны поддержать эту информацию состояния для обеспечения корректного выполнения операций в коде. Таблица 1 перечисляет ключевые пути, связанные с состояниями работы и как необходимо управлять тем ключевым путем в любых пользовательских подклассах.
Ключевой путь |
Описание |
---|---|
|
В большинстве случаев Вы не должны управлять состоянием этого ключевого пути сами. Если готовность Ваших операций определяется факторами кроме зависимых операций, однако — такой как некоторым внешним условием в Вашей программе — можно обеспечить собственную реализацию В OS X v10.6 и позже при отмене работы, в то время как он ожидает на завершении одного или более зависимых операций, после того проигнорированы те зависимости, и значение этого свойства обновляется, чтобы отразить, что это теперь готово работать. Это поведение дает очереди работы шанс сбросить отмененные операции из его очереди более быстро. |
|
Если Вы заменяете |
|
Если Вы заменяете |
|
|
Ответ на команду отмены
Как только Вы добавляете работу к очереди, работа вне Ваших рук. Очередь вступает во владение и обрабатывает планирование той задачи. Однако, если Вы решаете позже, что не хотите выполнять работу, в конце концов —, потому что пользователь нажал кнопку отмены в панели прогресса или вышел из приложения, например — можно отменить работу, чтобы препятствовать тому, чтобы он использовал процессорное время напрасно. Вы делаете это путем вызова cancel
метод самого объекта операции или путем вызова cancelAllOperations
метод NSOperationQueue
класс.
Отмена работы сразу не вынуждает его остановить то, что это делает. Несмотря на то, что уважая значение в cancelled
свойство ожидается всех операций, Ваш код должен явно проверить значение в это свойство и аварийное прекращение работы по мере необходимости. Реализация по умолчанию NSOperation
включает проверки на отмену. Например, если Вы отменяете работу перед start
метод вызывают, start
метод выходит, не запуская задачу.
Необходимо всегда поддерживать семантику отмены в любом пользовательском коде, который Вы пишете. В частности Ваш основной код задачи должен периодически проверять значение cancelled
свойство. Если свойство сообщает о значении YES
true
, Ваш объект операции должен очистить и выйти как можно быстрее. Если Вы реализуете пользовательское start
метод, тот метод должен включать ранние проверки на отмену и вести себя соответственно. Ваше пользовательское start
метод должен быть подготовлен обработать этот тип ранней отмены.
В дополнение к простому выходу, когда работа отменяется, также важно, чтобы Вы переместили отмененную работу в надлежащее конечное состояние. В частности, если Вы управляете значениями для finished
и executing
свойства самостоятельно (возможно, потому что Вы реализуете параллельную работу), необходимо обновить те свойства соответственно. В частности необходимо изменить значение, возвращенное finished
к YES
true
и значение, возвращенное executing
к NO
false
. Необходимо внести эти изменения, даже если бы работа была отменена, прежде чем она начала выполняться.
Наследование
-
NSObject
-
NSOperation
-
CKOperation
-
NSBlockOperation
-
NSObject
-
NSOperation
-
CKOperation
-
NSBlockOperation
-
NSInvocationOperation
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.5 и позже.
-
Возвращает инициализированный
NSOperation
объект.Объявление
Objective C
- (id)init
Возвращаемое значение
Инициализированный
NSOperation
объект.Обсуждение
Ваши пользовательские подклассы должны вызвать этот метод. Реализация по умолчанию инициализирует переменные экземпляра объекта и подготавливает его к использованию. Этот метод работает на текущем потоке — т.е. поток, который Вы используете для выделения объекта операции.
Оператор импорта
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.5 через OS X v10.9.
-
Начинает выполнение работы.
Объявление
Swift
func start()
Objective C
- (void)start
Обсуждение
Реализация по умолчанию этого метода обновляет режим выполнения работы и вызывает основной метод получателя. Этот метод также выполняет несколько проверок, чтобы гарантировать, что может фактически работать работа. Например, если получатель был отменен или уже закончен, этот метод просто возвращается, не вызывая основной. (В OS X v10.5, этот метод выдает исключение, если уже закончена работа.), Если работа в настоящее время выполняется или не готова выполниться, этот метод бросает
NSInvalidArgumentException
исключение. В OS X v10.5, этот метод ловит и игнорирует любые исключения, выданные Вашим основным методом автоматически. В OS X v10.6 и позже, исключениям позволяют распространить вне этого метода. Вы никогда не должны позволять исключениям распространять из Вашего основного метода.При реализации параллельной работы необходимо переопределить этот метод и использовать его для инициирования работы. Ваша пользовательская реализация не должна вызывать
super
в любое время. В дополнение к конфигурированию среды выполнения для Вашей задачи Ваша реализация этого метода должна также отследить состояние работы и обеспечить надлежащие изменения состояния. Когда работа выполняет и впоследствии заканчивает свою работу, она должна генерировать уведомления KVO дляisExecuting
иisFinished
ключ соединяет каналом соответственно. Для получения дополнительной информации о ручной генерации уведомлений KVO, посмотрите, что Значение ключа Наблюдает Руководство по программированию.Если Вы хотите выполнить свои операции вручную, можно вызвать этот метод явно. Однако это - ошибка программиста вызвать этот метод на объекте операции, который уже находится в очереди работы или поставить работу в очередь после вызова этого метода. Как только Вы добавляете объект операции к очереди, очередь принимает на себя всю ответственность за него.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
Выполняет непараллельную задачу получателя.
Объявление
Swift
func main()
Objective C
- (void)main
Обсуждение
Реализация по умолчанию этого метода ничего не делает. Необходимо переопределить этот метод для выполнения желаемой задачи. В Вашей реализации не вызывать
super
.При реализации параллельной работы Вы не обязаны переопределять этот метод, но можете сделать так, если Вы планируете вызвать его от своего пользовательского
start
метод.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
completionBlock completionBlock
СвойствоБлок для выполнения после основной задачи работы завершается.
Объявление
Swift
var completionBlock: (() -> Void)?
Objective C
@property(copy) void (^completionBlock)(void)
Обсуждение
Блок завершения не берет параметров и не имеет никакого возвращаемого значения.
Контекст точного исполнения для Вашего блока завершения не гарантируется, но обычно является вторичным потоком. Поэтому Вы не должны использовать этот блок для выполнения любой работы, требующей очень определенного контекста выполнения. Вместо этого необходимо шунтировать ту работу к основному потоку приложения или к определенному потоку, который способен к выполнению его. Например, если у Вас есть пользовательский поток для координирования завершения работы, Вы могли бы использовать блок завершения для проверки с помощью ping-запросов того потока.
Блок завершения, который Вы обеспечиваете, выполняется когда значение в
finished
свойство изменяется наYES
true
. Поскольку блок завершения выполняется после того, как работа указывает, что это закончило свою задачу, Вы не должны использовать блок завершения для организации очередей считавшей части дополнительной работы той задачи. Объект операции, чейfinished
свойство содержит значениеYES
true
должен быть сделан со всей его связанной с задачей работой по определению. Блок завершения должен использоваться, чтобы уведомить заинтересованные объекты, что работа завершена, или выполните другие задачи, которые могли бы быть связаны с, но не часть, фактическая задача работы.Законченная работа может закончиться или потому что она была отменена или потому что она успешно выполнила свою задачу. Необходимо принять тот факт во внимание при записи блочного кода. Точно так же Вы не должны делать предположения об успешном завершении зависимых операций, которые, возможно, самостоятельно были отменены.
В iOS 8 и позже и OS X v10.10 и позже, это свойство установлено в
nil
после того, как блок завершения начинает выполняться.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.6 и позже.
-
Советует объекту операции, что он должен прекратить выполнять свою задачу.
Объявление
Swift
func cancel()
Objective C
- (void)cancel
Обсуждение
Этот метод не вынуждает Ваш код операции остановиться. Вместо этого это обновляет внутренние флаги объекта для отражения изменения в состоянии. Если работа уже закончила выполняться, этот метод не имеет никакого эффекта. При отмене работы, которая в настоящее время находится в очереди работы, но еще выполнения, позволяет удалить работу из очереди раньше чем обычно.
В OS X v10.6 и позже, если работа находится в очереди, но ожидающий на незаконченных зависимых операциях, впоследствии проигнорированы те операции. Поскольку это уже отменяется, это поведение позволяет очереди работы вызывать работу
start
метод раньше и ясный объект из очереди. Если Вы отменяете работу, которая не находится в очереди, этот метод сразу отмечает объект, как закончено. В каждом случае, отмечая объект как готовые или законченные результаты в генерации надлежащих уведомлений KVO.В версиях OS X до 10,6, объект операции остается в очереди, пока все ее зависимости не удалены посредством нормальных процессов. Таким образом работа должна ожидать, пока все ее зависимые операции не заканчивают выполняться или самостоятельно отменяются и имеют их
start
метод вызывают.Для получения дополнительной информации о каком необходимо сделать в объектах операции, чтобы поддерживать отмену, видеть Ответ на Команду Отмены.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
отмененный отмененный
СвойствоБулево значение, указывающее, была ли работа отменена (только для чтения)
Объявление
Swift
var cancelled: Bool { get }
Objective C
@property(readonly, getter=isCancelled) BOOL cancelled
Обсуждение
Значение по умолчанию этого свойства
NO
false
. Вызовcancel
метод этого объекта устанавливает значение этого свойства кYES
true
. После того, как отмененный, работа должна переместиться в законченное состояние.Отмена работы активно не мешает коду получателя выполниться. Если метод возвращается, объект операции ответственен за вызов этого метода периодически и остановку себя
YES
true
.Необходимо всегда проверять значение этого свойства прежде, чем сделать любую работу для выполнения задачи работы, обычно означающей проверять его в начале пользовательского
main
метод. Для работы возможно быть отмененным, прежде чем это начнет выполняться или в любое время в то время как это выполняется. Поэтому проверяя значение в начале Вашегоmain
когда работа отменяется, метод (и периодически всюду по тому методу) позволяет Вам выйти как можно быстрее.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
См. также
-
выполнение выполнение
СвойствоБулево значение, указывающее, выполняется ли в настоящее время работа. (только для чтения)
Объявление
Swift
var executing: Bool { get }
Objective C
@property(readonly, getter=isExecuting) BOOL executing
Обсуждение
Значение этого свойства
YES
true
если работа в настоящее время выполняет свою основную задачу илиNO
false
если это не.При реализации параллельного объекта операции необходимо переопределить реализацию этого свойства так, чтобы можно было возвратить режим выполнения работы. В Вашей пользовательской реализации необходимо генерировать уведомления KVO для
isExecuting
ключевой путь каждый раз, когда режим выполнения Ваших изменений объекта операции. Для получения дополнительной информации о ручной генерации уведомлений KVO, посмотрите, что Значение ключа Наблюдает Руководство по программированию.Вы не должны повторно реализовывать это свойство для непараллельных операций.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
законченный законченный
СвойствоБулево значение, указывающее, закончила ли работа выполнять свою задачу. (только для чтения)
Объявление
Swift
var finished: Bool { get }
Objective C
@property(readonly, getter=isFinished) BOOL finished
Обсуждение
Значение этого свойства
YES
true
если работа закончила свою основную задачу илиNO
false
если это выполняет ту задачу или еще не запустило его.При реализации параллельного объекта операции необходимо переопределить реализацию этого свойства так, чтобы можно было возвратить законченное состояние работы. В Вашей пользовательской реализации необходимо генерировать уведомления KVO для
isFinished
ключевой путь каждый раз, когда законченное состояние Ваших изменений объекта операции. Для получения дополнительной информации о ручной генерации уведомлений KVO, посмотрите, что Значение ключа Наблюдает Руководство по программированию.Вы не должны повторно реализовывать это свойство для непараллельных операций.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
параллельный параллельный
СвойствоБулево значение, указывающее, выполняет ли работа свою задачу асинхронно. (только для чтения)
Объявление
Swift
var concurrent: Bool { get }
Objective C
@property(readonly, getter=isConcurrent) BOOL concurrent
Обсуждение
Используйте
asynchronous
свойство вместо этого.Значение этого свойства
YES
true
для операций, работающих асинхронно относительно текущего потока илиNO
false
для операций, работающих синхронно на текущем потоке. Значение по умолчанию этого свойстваNO
false
.В OS X v10.6 и позже, очереди работы игнорируют значение в этом свойстве и всегда запускают операции на отдельном потоке.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
асинхронный асинхронный
СвойствоБулево значение, указывающее, выполняет ли работа свою задачу асинхронно. (только для чтения)
Объявление
Swift
var asynchronous: Bool { get }
Objective C
@property(readonly, getter=isAsynchronous) BOOL asynchronous
Обсуждение
Значение этого свойства
YES
true
для операций, работающих асинхронно относительно текущего потока илиNO
false
для операций, работающих синхронно на текущем потоке. Значение по умолчанию этого свойстваNO
false
.При реализации асинхронного объекта операции необходимо реализовать это свойство и возврат
YES
true
. Для получения дополнительной информации о том, как реализовать асинхронную работу, посмотрите Асинхронный По сравнению с Синхронными Операциями.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.8 и позже.
-
Булево значение, указывающее, может ли работа быть выполнена теперь. (только для чтения)
Объявление
Swift
var ready: Bool { get }
Objective C
@property(readonly, getter=isReady) BOOL ready
Обсуждение
Готовность операций определяется их зависимостями от других операций и потенциально пользовательскими условиями, которые Вы определяете.
NSOperation
класс управляет зависимостями от других операций и сообщает о готовности получателя на основе тех зависимостей.Если Вы хотите использовать пользовательские условия определить готовность Вашего объекта операции, повторно реализовать это свойство и возвратить значение, точно отражающее готовность получателя. Если Вы делаете так, Ваша пользовательская реализация должна получить значение свойства по умолчанию от
super
и включите то значение готовности в новое значение свойства. В Вашей пользовательской реализации необходимо генерировать уведомления KVO дляisReady
ключевой путь каждый раз, когда состояние готовности Ваших изменений объекта операции. Для получения дополнительной информации о генерации уведомлений KVO, посмотрите, что Значение ключа Наблюдает Руководство по программированию.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
См. также
-
Имя работы.
Обсуждение
Присвойте имя к объекту операции, чтобы помочь идентифицировать его во время отладки.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
Делает получатель зависящим от завершения указанной работы.
Объявление
Swift
func addDependency(_
operation
: NSOperation)Objective C
- (void)addDependency:(NSOperation *)
operation
Параметры
operation
Работа, от которой должен зависеть получатель. Та же зависимость не должна быть добавлена несколько раз к получателю, и результаты выполнения так не определены.
Обсуждение
Получатель не считают готовым выполниться, пока все его зависимые операции не закончили выполняться. Если получатель уже выполняет свою задачу, добавление, что зависимости не имеют никакого практического эффекта. Этот метод может измениться
isReady
иdependencies
свойства получателя.Это - ошибка программиста создать любые круговые зависимости среди ряда операций. Выполнение так может вызвать мертвую блокировку среди операций и может заморозить Вашу программу.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
Удаляет зависимость получателя от указанной работы.
Объявление
Swift
func removeDependency(_
operation
: NSOperation)Objective C
- (void)removeDependency:(NSOperation *)
operation
Параметры
operation
Зависимая работа, которая будет удалена из получателя.
Обсуждение
Этот метод может измениться
isReady
иdependencies
свойства получателя.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
зависимости зависимости
СвойствоМассив объектов операции, которые должны закончить выполняться перед текущим объектом, может начать выполняться. (только для чтения)
Объявление
Swift
var dependencies: [AnyObject] { get }
Objective C
@property(readonly, copy) NSArray *dependencies
Обсуждение
Это свойство содержит массив
NSOperation
объекты. Для добавления объекта к этому массиву используйтеaddDependency:
метод.Объект операции не должен выполняться, пока все его зависимые операции не заканчивают выполняться. Операции не удалены из этого списка зависимости, поскольку они заканчивают выполняться. Можно использовать этот список для отслеживания всех зависимых операций, включая тех, которые уже закончили выполняться. Единственный способ удалить работу из этого списка состоит в том, чтобы использовать
removeDependency:
метод.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
См. также
-
qualityOfService qualityOfService
СвойствоОтносительная важная сумма для предоставления системных ресурсов к работе.
Объявление
Swift
var qualityOfService: NSQualityOfService
Objective C
@property NSQualityOfService qualityOfService
Обсуждение
Уровни обслуживания влияют на приоритет, с которым объекту операции предоставляют доступ к системным ресурсам, таким как процессорное время, сетевые ресурсы, дисковые ресурсы, и т.д. Операциям с более высоким уровнем качества обслуживания отдают больший приоритет по системным ресурсам так, чтобы они могли выполнить свою задачу более быстро. Вы используете уровни обслуживания, чтобы гарантировать, что операциям, отвечающим на явные пользовательские запросы, дают приоритет над менее важной работой.
Это свойство отражает, что минимальный уровень обслуживания должен был выполнить работу эффективно. Значение по умолчанию этого свойства
NSOperationQualityOfServiceBackground
и необходимо оставить то значение на месте, когда это возможно. При изменении уровня обслуживания используйте минимальный уровень, который является подходящим для выполнения соответствующей задачи. Например, если пользователь инициирует задачу и ожидает ее, чтобы закончить, присвоить значениеNSOperationQualityOfServiceUserInitiated
к этому свойству. Если ресурсы доступны, чтобы сделать так, система может дать работе более высокий уровень обслуживания работе.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.10 и позже.
-
Приоритет потока использовать при выполнении работы
Обсуждение
Значение в этом свойстве является числом с плавающей точкой в диапазоне
0.0
к1.0
, где1.0
самый высокий приоритет. Приоритет потока по умолчанию0.5
.Значение, которое Вы указываете, отображается на приоритетных значениях операционной системы. Указанный приоритет потока применяется к потоку только в то время как работа
main
метод выполняется. В то время как блок завершения работы выполняется, это не применяется. Для параллельной работы, в которой Вы создаете свой собственный поток, необходимо установить приоритет потока сами в пользовательскомstart
метод и сброс исходный приоритет, когда закончена работа.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.6 и позже.
Осуждаемый в OS X v10.10.
См. также
-
queuePriority queuePriority
СвойствоПриоритет выполнения работы в очереди работы.
Объявление
Swift
var queuePriority: NSOperationQueuePriority
Objective C
@property NSOperationQueuePriority queuePriority
Обсуждение
Это свойство содержит относительный приоритет работы. Это значение используется для влияния на порядок, в котором операции исключаются из очереди и выполняются. Возвращенное значение всегда соответствует одной из предопределенных констант. (Для списка допустимых значений посмотрите NSOperationQueuePriority.), Если никакой приоритет явно не установлен, этот метод возвраты
NSOperationQueuePriorityNormal
.Необходимо использовать приоритетные значения только по мере необходимости для классификации относительного приоритета независимых операций. Приоритетные значения не должны использоваться для реализации управления зависимостью среди различных объектов операции. Если необходимо установить зависимости между операциями, используйте
addDependency:
метод вместо этого.При попытке указать приоритетное значение, не соответствующее одну из определенных констант, объект операции автоматически корректирует значение, которое Вы указываете к
NSOperationQueuePriorityNormal
приоритет, останавливающийся в первом допустимом постоянном значении. Например, при указании значения-10 работа скорректировала бы то значение для соответствияNSOperationQueuePriorityVeryLow
постоянный. Точно так же, если бы Вы указали +10, то эта работа скорректировала бы значение для соответствияNSOperationQueuePriorityVeryHigh
постоянный.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
-
Блочное выполнение текущего потока до объекта операции заканчивает свою задачу.
Объявление
Swift
func waitUntilFinished()
Objective C
- (void)waitUntilFinished
Обсуждение
Объект операции никогда не должен вызывать этот метод на себе и должен избежать вызывать его на любых операциях, представленных той же очереди работы как самой. Выполнение так может заставить работу заходить в тупик. Вместо этого другие части Вашего приложения могут вызвать этот метод по мере необходимости для препятствования другим задачам завершиться, пока не заканчивается целевой объект операции. Обычно безопасно вызвать этот метод на работе, которая находится в различной очереди работы, несмотря на то, что все еще возможно создать мертвые блокировки, если каждая работа ожидает на другом.
Типичное использование для этого метода должно было бы вызвать его от кода, создавшего работу во-первых. После представления работы очереди Вы вызвали бы этот метод для ожидания, пока та работа не закончила выполняться.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.6 и позже.
-
Эти константы позволяют Вам приоритезировать порядок, в котором выполняются операции.
Объявление
Swift
enum NSOperationQueuePriority : Int { case VeryLow case Low case Normal case High case VeryHigh }
Objective C
typedef enum : NSInteger { NSOperationQueuePriorityVeryLow = -8, NSOperationQueuePriorityLow = -4, NSOperationQueuePriorityNormal = 0, NSOperationQueuePriorityHigh = 4, NSOperationQueuePriorityVeryHigh = 8 } NSOperationQueuePriority;
Константы
-
VeryLow
NSOperationQueuePriorityVeryLow
Операции получают очень низкий приоритет для выполнения.
Доступный в OS X v10.5 и позже.
-
Low
NSOperationQueuePriorityLow
Операции получают низкий приоритет для выполнения.
Доступный в OS X v10.5 и позже.
-
Normal
NSOperationQueuePriorityNormal
Операции получают нормальный приоритет для выполнения.
Доступный в OS X v10.5 и позже.
-
High
NSOperationQueuePriorityHigh
Операции получают высокий приоритет для выполнения.
Доступный в OS X v10.5 и позже.
-
VeryHigh
NSOperationQueuePriorityVeryHigh
Операции получают очень высокий приоритет для выполнения.
Доступный в OS X v10.5 и позже.
Обсуждение
Можно использовать эти константы для указания относительного упорядочивания операций, ожидающих, чтобы быть запущенными в очереди работы. Необходимо всегда использовать эти константы (а не определенное значение) для определения приоритета.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.5 и позже.
-
-
Константы, указывающие приоритет, с которым системные ресурсы даны работе
Объявление
Objective C
#define NSOperationQualityOfService NSQualityOfService #define NSOperationQualityOfServiceUserInteractive NSQualityOfServiceUserInteractive #define NSOperationQualityOfServiceUserInitiated NSQualityOfServiceUserInitiated #define NSOperationQualityOfServiceUtility NSQualityOfServiceUtility #define NSOperationQualityOfServiceBackground NSQualityOfServiceBackground
Константы
-
NSOperationQualityOfService
NSOperationQualityOfService
Полный тип для констант качества обслуживания. Не используйте этот макрос в качестве значения при указании качества обслуживания.
Доступный в OS X v10.10 и позже.
-
NSOperationQualityOfServiceUserInteractive
NSOperationQualityOfServiceUserInteractive
Работа соответствует графически интерактивной задаче, включая прокрутку или анимацию в некоторой форме. Поскольку они - интерактивный пользователь, операциям с этим уровнем обслуживания дают приоритет самое высокое для любых необходимых системных ресурсов.
Доступный в OS X v10.10 и позже.
-
NSOperationQualityOfServiceUserInitiated
NSOperationQualityOfServiceUserInitiated
Работа соответствует задаче, которую инициировал пользователь. Задачам с этим уровнем обслуживания дают относительно высокий приоритет для системных ресурсов, потому что они инициировались пользователем и поэтому соответствуют работе, которую пользователь хочет сделанный скоро.
Доступный в OS X v10.10 и позже.
-
NSOperationQualityOfServiceUtility
NSOperationQualityOfServiceUtility
Работа соответствует задачам, инициируемым приложением, но отражающий относительно важную работу, сделанную от имени пользователя. Задачам с этим уровнем обслуживания дают приоритет носитель для системных ресурсов.
Доступный в OS X v10.10 и позже.
-
NSOperationQualityOfServiceBackground
NSOperationQualityOfServiceBackground
Работа соответствует задачам, инициирующимся приложением и представляющим некритические задачи. Операциям с этим приоритетом дают приоритет самое низкое для системных ресурсов.
Доступный в OS X v10.10 и позже.
-