如何制作NSOperationQueue系列?

lak*_*esh 19 objective-c nsoperationqueue ios

我打算使NSOperationQueue串行而不是并发.

我知道的一种方法是:

NSOperationQueue *globalQueue;
globalQueue.maxConcurrentOperationCount =1;
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?

Gab*_*iel 17

如果需要串行队列,则将maxConcurrentOperation设置为1.您还可以使用[NSOperationQueue mainQueue]而不是创建新队列,从而对主线程进行队列操作.但这仅在添加非常短的操作时才有用,因此不会阻止用户界面.而另一方面,你不必担心线程n同步.

您可以使用addOperations向任何队列添加操作:waitUntilFinished:YES或每次添加操作时发送消息waitUntilAllOperationsAreFinished.这样您就可以序列化操作,而不是将队列定义为串行.

  • 我不认为将maxConcurrentOperation设置为1会使操作串行,如果通过串行表示操作排队的顺序是保持的.为了维护插入顺序,您必须在操作之间添加依赖关系.默认情况下,NSOpeationQueue是并发的,并且不会保留选择执行操作的顺序.例如:如果操作排队为1,2,3,4,那么它们可能会以2,3,1,4的顺序被选中执行. (10认同)
  • https://developer.apple.com/documentation/foundation/operationqueue “如果所有排队操作都具有相同的queuePriority,并且在放入队列时准备好执行,也就是说,它们的 isReady 属性返回 true,那么它们”按照它们提交到队列的顺序重新执行。” (3认同)