Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы основы ссылка класса NSOperation

Опции
Развертывание Target:

На этой странице
Язык:

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 перечисляет ключевые пути, связанные с состояниями работы и как необходимо управлять тем ключевым путем в любых пользовательских подклассах.

Таблица 1Key соединяет каналом для состояний объекта операции

Ключевой путь

Описание

isReady

isReady когда работа готова выполниться, ключевой путь сообщает клиентам. ready свойство содержит значение YEStrue когда работа готова выполниться теперь или NOfalse если существуют все еще незаконченные операции, от которых это зависит.

В большинстве случаев Вы не должны управлять состоянием этого ключевого пути сами. Если готовность Ваших операций определяется факторами кроме зависимых операций, однако — такой как некоторым внешним условием в Вашей программе — можно обеспечить собственную реализацию ready свойство и дорожка готовность Вашей работы самостоятельно. Это часто более просто, хотя только создать объекты операции только, когда Ваше внешнее состояние позволяет его.

В OS X v10.6 и позже при отмене работы, в то время как он ожидает на завершении одного или более зависимых операций, после того проигнорированы те зависимости, и значение этого свойства обновляется, чтобы отразить, что это теперь готово работать. Это поведение дает очереди работы шанс сбросить отмененные операции из его очереди более быстро.

isExecuting

isExecuting ключевой путь сообщает клиентам, работает ли работа активно над своей присвоенной задачей. executing свойство должно сообщить о значении YEStrue если работа работает над своей задачей или NOfalse если это не.

Если Вы заменяете start метод Вашего объекта операции, необходимо также заменить executing когда режим выполнения Вашей работы изменяется, свойство и генерирует уведомления KVO.

isFinished

isFinished ключевой путь позволяет клиентам знать, что работа закончила свою задачу успешно или была отменена и выходит. Объект операции не очищает зависимость до значения в isFinished ключевой путь изменяется на YEStrue. Точно так же очередь работы не исключает работу из очереди до finished свойство содержит значение YEStrue. Таким образом маркировка операций, как закончено критически важна по отношению к препятствованию очередям отойти назад с происходящими или отмененными операциями.

Если Вы заменяете start метод или Ваш объект операции, необходимо также заменить finished когда работа заканчивает выполняться или отменяется, свойство и генерирует уведомления KVO.

isCancelled

isCancelled ключевой путь позволяет клиентам знать, что требовали отмену работы. Поддержка отмены добровольна, но мотивирован, и Вашему собственному коду не придется отправить уведомления KVO за этим ключевым путем. Обработка уведомлений об аннулировании в работе описана более подробно в Ответе на Команду Отмены.

Ответ на команду отмены

Как только Вы добавляете работу к очереди, работа вне Ваших рук. Очередь вступает во владение и обрабатывает планирование той задачи. Однако, если Вы решаете позже, что не хотите выполнять работу, в конце концов —, потому что пользователь нажал кнопку отмены в панели прогресса или вышел из приложения, например — можно отменить работу, чтобы препятствовать тому, чтобы он использовал процессорное время напрасно. Вы делаете это путем вызова cancel метод самого объекта операции или путем вызова cancelAllOperations метод NSOperationQueue класс.

Отмена работы сразу не вынуждает его остановить то, что это делает. Несмотря на то, что уважая значение в cancelled свойство ожидается всех операций, Ваш код должен явно проверить значение в это свойство и аварийное прекращение работы по мере необходимости. Реализация по умолчанию NSOperation включает проверки на отмену. Например, если Вы отменяете работу перед start метод вызывают, start метод выходит, не запуская задачу.

Необходимо всегда поддерживать семантику отмены в любом пользовательском коде, который Вы пишете. В частности Ваш основной код задачи должен периодически проверять значение cancelled свойство. Если свойство сообщает о значении YEStrue, Ваш объект операции должен очистить и выйти как можно быстрее. Если Вы реализуете пользовательское start метод, тот метод должен включать ранние проверки на отмену и вести себя соответственно. Ваше пользовательское start метод должен быть подготовлен обработать этот тип ранней отмены.

В дополнение к простому выходу, когда работа отменяется, также важно, чтобы Вы переместили отмененную работу в надлежащее конечное состояние. В частности, если Вы управляете значениями для finished и executing свойства самостоятельно (возможно, потому что Вы реализуете параллельную работу), необходимо обновить те свойства соответственно. В частности необходимо изменить значение, возвращенное finished к YEStrue и значение, возвращенное executing к NOfalse. Необходимо внести эти изменения, даже если бы работа была отменена, прежде чем она начала выполняться.

Соответствует


Оператор импорта


Swift

import Foundation

Objective C

@import Foundation;

Доступность


Доступный в OS X v10.5 и позже.
  • init - init Доступный в OS X v10.5 через OS X v10.9

    Возвращает инициализированный 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 свойство изменяется на YEStrue. Поскольку блок завершения выполняется после того, как работа указывает, что это закончило свою задачу, Вы не должны использовать блок завершения для организации очередей считавшей части дополнительной работы той задачи. Объект операции, чей finished свойство содержит значение YEStrue должен быть сделан со всей его связанной с задачей работой по определению. Блок завершения должен использоваться, чтобы уведомить заинтересованные объекты, что работа завершена, или выполните другие задачи, которые могли бы быть связаны с, но не часть, фактическая задача работы.

    Законченная работа может закончиться или потому что она была отменена или потому что она успешно выполнила свою задачу. Необходимо принять тот факт во внимание при записи блочного кода. Точно так же Вы не должны делать предположения об успешном завершении зависимых операций, которые, возможно, самостоятельно были отменены.

    В 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

    Обсуждение

    Значение по умолчанию этого свойства NOfalse. Вызов cancel метод этого объекта устанавливает значение этого свойства к YEStrue. После того, как отмененный, работа должна переместиться в законченное состояние.

    Отмена работы активно не мешает коду получателя выполниться. Если метод возвращается, объект операции ответственен за вызов этого метода периодически и остановку себя YEStrue.

    Необходимо всегда проверять значение этого свойства прежде, чем сделать любую работу для выполнения задачи работы, обычно означающей проверять его в начале пользовательского 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

    Обсуждение

    Значение этого свойства YEStrue если работа в настоящее время выполняет свою основную задачу или NOfalse если это не.

    При реализации параллельного объекта операции необходимо переопределить реализацию этого свойства так, чтобы можно было возвратить режим выполнения работы. В Вашей пользовательской реализации необходимо генерировать уведомления 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

    Обсуждение

    Значение этого свойства YEStrue если работа закончила свою основную задачу или NOfalse если это выполняет ту задачу или еще не запустило его.

    При реализации параллельного объекта операции необходимо переопределить реализацию этого свойства так, чтобы можно было возвратить законченное состояние работы. В Вашей пользовательской реализации необходимо генерировать уведомления 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 свойство вместо этого.

    Значение этого свойства YEStrue для операций, работающих асинхронно относительно текущего потока или NOfalse для операций, работающих синхронно на текущем потоке. Значение по умолчанию этого свойства NOfalse.

    В 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

    Обсуждение

    Значение этого свойства YEStrue для операций, работающих асинхронно относительно текущего потока или NOfalse для операций, работающих синхронно на текущем потоке. Значение по умолчанию этого свойства NOfalse.

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

    Оператор импорта

    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 и позже.

    См. также

    зависимости

  • имя имя Свойство

    Имя работы.

    Объявление

    Swift

    var name: String?

    Objective C

    @property(copy) NSString *name

    Обсуждение

    Присвойте имя к объекту операции, чтобы помочь идентифицировать его во время отладки.

    Оператор импорта

    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 и позже.

  • Относительная важная сумма для предоставления системных ресурсов к работе.

    Объявление

    Swift

    var qualityOfService: NSQualityOfService

    Objective C

    @property NSQualityOfService qualityOfService

    Обсуждение

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

    Это свойство отражает, что минимальный уровень обслуживания должен был выполнить работу эффективно. Значение по умолчанию этого свойства NSOperationQualityOfServiceBackground и необходимо оставить то значение на месте, когда это возможно. При изменении уровня обслуживания используйте минимальный уровень, который является подходящим для выполнения соответствующей задачи. Например, если пользователь инициирует задачу и ожидает ее, чтобы закончить, присвоить значение NSOperationQualityOfServiceUserInitiated к этому свойству. Если ресурсы доступны, чтобы сделать так, система может дать работе более высокий уровень обслуживания работе.

    Оператор импорта

    Objective C

    @import Foundation;

    Swift

    import Foundation

    Доступность

    Доступный в OS X v10.10 и позже.

  • threadPriority threadPriority (OS X v10.10) Свойство

    Приоритет потока использовать при выполнении работы

    Объявление

    Swift

    var threadPriority: Double

    Objective C

    @property double threadPriority

    Обсуждение

    Значение в этом свойстве является числом с плавающей точкой в диапазоне 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.

    См. также

    threadPriority

  • 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 и позже.