Есть ли безопасный способ изменить приоритет NSOperation, который уже помещен в очередь в NSOperationQueue? Если операция еще не началась, проблем нет, но если она уже выполняется, я получаю исключение NSInvalidArgumentException.
Вы не должны изменять NSOperation, как только он был помещен в очередь. Согласно руководству по программированию потоков от Apple :
Важно: Вы никогда не должны изменять объект операции после того, как он был добавлено в очередь. В ожидании в очередь, операция может выполняться в в любой момент. Меняя свой статус, пока он выполняет может иметь неблагоприятные последствия. Вы можете использовать методы объект операции, чтобы определить, операция выполняется, ожидая запустить или уже закончил.
Согласно Руководству по программированию параллелизма мы должны иметь возможность изменить приоритет
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.
На документах нет предупреждений об изменении приоритета после начала операции и нет упоминаний о возбужденных исключениях.
На самом деле изменение приоритета выполняемой операции просто не имеет никакого эффекта. Может быть, вы делаете что-то не так в другом месте?