Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSOperationQueue中第一个低优先级操作的顺序无效_Ios_Swift_Nsoperationqueue - Fatal编程技术网

Ios NSOperationQueue中第一个低优先级操作的顺序无效

Ios NSOperationQueue中第一个低优先级操作的顺序无效,ios,swift,nsoperationqueue,Ios,Swift,Nsoperationqueue,真想知道,为什么将挂起状态更改为false后第一个操作的位置没有更改 let operationQueue=operationQueue.main let operation1=BlockOperation{print(“1”)} 操作1.queuePriority=.low let operation2=BlockOperation{print(“2”)} operation2.queuePriority=.normal let operation3=块操作{print(“3”)} 操作3.q

真想知道,为什么将挂起状态更改为
false
后第一个操作的位置没有更改

let operationQueue=operationQueue.main
let operation1=BlockOperation{print(“1”)}
操作1.queuePriority=.low
let operation2=BlockOperation{print(“2”)}
operation2.queuePriority=.normal
let operation3=块操作{print(“3”)}
操作3.queuePriority=.high
let operation4=块操作{print(“4”)}
operation4.queuePriority=.veryHigh
operationQueue.isSuspended=true
operationQueue.addOperation(操作1)
operationQueue.addOperation(操作2)
operationQueue.addOperation(操作3)
operationQueue.addOperation(操作4)
operationQueue.isSuspended=false
打印输出:

1
4.
3.
2.
预期打印输出:

4
3.
2.
1.
UPD
注意到此行为仅适用于
OperationQueue.main
。对于自定义
OperationQueue()
,使用
maxConcurrentOperationCount=1
可以正常工作。

您不能挂起
.main
。这是一个系统队列

这一点在相关文档中有更明确的解释:

与全局并发队列一样,对suspend()、resume()、dispatch_set_context(::)等的调用在该属性中的队列上使用时不起作用

当您计划第一个任务时,队列是空的,并且它是最高优先级的,因此会立即计划它。当队列中有挂起的任务时,它们会按优先级排序,尽管这不是承诺。如果您需要订单,则使用依赖项,而不是优先级。优先权是一种暗示,根据我的经验,除非你有一个非常特殊的问题,否则通常应该避免优先权


在自定义队列的情况下,它实际上是挂起的,因此第一个任务不会在您将其排入队列后立即安排。

您不能挂起
.main
。这是一个系统队列

这一点在相关文档中有更明确的解释:

与全局并发队列一样,对suspend()、resume()、dispatch_set_context(::)等的调用在该属性中的队列上使用时不起作用

当您计划第一个任务时,队列是空的,并且它是最高优先级的,因此会立即计划它。当队列中有挂起的任务时,它们会按优先级排序,尽管这不是承诺。如果您需要订单,则使用依赖项,而不是优先级。优先权是一种暗示,根据我的经验,除非你有一个非常特殊的问题,否则通常应该避免优先权


对于您的自定义队列,它实际上是挂起的,因此第一个任务不会在您排队时立即安排。

谢谢!但是为什么我看不到以下输出:[1,2,3,4]那么呢?但是,2-4个操作按适当的优先级位置排序。因为当1添加到主队列时,那里没有其他内容(并且主队列无法挂起),所以它可能只是启动。但2-4将倾向于反映他们的优先权(尽管正如罗布·纳皮尔所说,这并不能保证)。但正如他所说的,如果必须按特定顺序运行它们,则不要使用优先级;使用依赖项。谢谢!但是为什么我看不到以下输出:[1,2,3,4]那么呢?但是,2-4个操作按适当的优先级位置排序。因为当1添加到主队列时,那里没有其他内容(并且主队列无法挂起),所以它可能只是启动。但2-4将倾向于反映他们的优先权(尽管正如罗布·纳皮尔所说,这并不能保证)。但正如他所说的,如果必须按特定顺序运行它们,则不要使用优先级;使用依赖项。请参阅关于使用
queuePriority
管理操作顺序的注意事项。请参阅关于使用
queuePriority
管理操作顺序的注意事项。