Безопасный способ изменить приоритет NSOperation - PullRequest
6 голосов
/ 18 июля 2009

Есть ли безопасный способ изменить приоритет NSOperation, который уже помещен в очередь в NSOperationQueue? Если операция еще не началась, проблем нет, но если она уже выполняется, я получаю исключение NSInvalidArgumentException.

Ответы [ 3 ]

11 голосов
/ 18 июля 2009

Вы не должны изменять NSOperation, как только он был помещен в очередь. Согласно руководству по программированию потоков от Apple :

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

1 голос
/ 07 февраля 2014

Согласно Руководству по программированию параллелизма мы должны иметь возможность изменить приоритет

For operations added to a queue, execution order is determined first by the
readiness of the queued operations and then by their relative priority. 
Readiness is determined by an operation’s dependencies on other operations, 
but the priority level is an attribute of the operation object itself. 
By default, all new operation objects have a “normal” priority, but you 
can increase or decrease that priority as needed by calling the object’s 
setQueuePriority: method.
0 голосов
/ 18 июля 2009

На документах нет предупреждений об изменении приоритета после начала операции и нет упоминаний о возбужденных исключениях.

На самом деле изменение приоритета выполняемой операции просто не имеет никакого эффекта. Может быть, вы делаете что-то не так в другом месте?

...