改变NSOperation优先级的安全方法

时间:2009-07-18 00:25:47

标签: iphone cocoa cocoa-touch macos

是否有一种安全的方法可以更改已在NSOperationQueue中排队的NSOperation的优先级?如果操作尚未开始,则没有问题,但如果它已经在执行,我会得到一个NSInvalidArgumentException。

3 个答案:

答案 0 :(得分:11)

一旦排队,你不应该改变NSOperation。根据Apple的Threading Programming Guide

  

重要提示:您永远不应该修改   它之后的操作对象   添加到队列中。在等待的时候   队列,操作可以执行   随时。改变它的状态   执行可能会有不利影响   效果。你可以使用的方法   操作对象确定是否   操作正在运行,等待   跑步,或已经完成。

答案 1 :(得分:1)

根据Concurrency Programming Guide,我们应该可以更改优先级

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.

答案 2 :(得分:0)

docs上没有关于在操作开始后没有改变优先级的警告,也没有提到引发的异常。

实际上,更改正在运行的操作的优先级根本没有效果。也许你在其他地方做错了什么?