2014-02-03 3 views
7

Мне нужно знать, что когда NSOperationQueue удаляет операцию из очереди? У меня есть NSOperationQueue который имеет список NSOperation. В какой момент NSOperationQueue удаляет операцию из очереди?Когда NSOperationQueue удаляет операцию из очереди?

  1. После запуска операции? ИЛИ
  2. После завершения или отмены операции?

Потому что мне нужно уведомление, когда все операции в NSOPerationqueue завершены. Для этого я говорил this link

+1

после финиша или отменить –

+0

В операции полного блока или не проверки счетчика работы в очереди операций (отправить уведомление или использовать делегат) –

ответ

7

Согласно компании Apple Developer Reference

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

Таким образом, NSOperationQueue удаляет операцию после ее завершения или отмены.

Источник - https://developer.apple.com/library/mac/documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html

+1

Обратите внимание, что если операция отменяется, она лишь устанавливает соответствующие флаги в операция по его маркировке как таковая - сама операция отвечает за проверку того, отменена ли она, и соответственно маркировка завершена. Операция, которая не началась *, должна * проверить, отменена ли она, когда она начинается и сразу же после завершения маркировки. Операция, которая выполняется, должна периодически проверять, отменена ли она и обрабатывать ее аналогичным образом. См. Https://developer.apple.com/reference/foundation/nsoperation/1411672-cancel?language=objc – Austin

+0

@ Замечание Аустина должно быть его собственным независимым ответом. Это было очень важно и полезно отметить, что отмена не означает немедленного удаления из очереди. – ricosrealm

+0

@ricosrealm, добавленный в качестве ответа с некоторыми изменениями. – Austin

2

NSOperationQueue управляет своей внутренней очереди NSOperation с. NSOperation будет удален только из очереди после ее отмены или завершения.

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

Также имеет смысл выполнить эту проверку перед выполнением деструктивного кода или кода, которые будут мутировать данные, такие как удаление объекта из основных данных.

См https://developer.apple.com/reference/foundation/nsoperation/1411672-cancel?language=objc

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