2013-02-21 31 views
12

我打算使NSOperationQueue串行而不是併發。我知道如何製作NSOperationQueue序列?

一種方法是:

NSOperationQueue *globalQueue; 
globalQueue.maxConcurrentOperationCount =1; 

有沒有其他辦法?

+4

這種方式有什麼問題? – 2013-02-21 06:47:45

+0

唯一的辦法?任何其他方式? – lakesh 2013-02-21 06:49:28

+0

是的,這是唯一的方法。 – 2013-02-21 06:51:06

回答

13

如果你想要一個串行隊列,你可以將maxConcurrentOperation設置爲1。你也可以使用[NSOperationQueue mainQueue]而不是創建一個新的隊列,並在主線程上進行隊列操作。但是,只有在添加了非常短的操作並且用戶界面未被阻止時纔有用。另一方面,你不必擔心線程同步。

您可以使用addOperations將操作添加到任何隊列:waitUntilFinished:YES或每次添加操作時發送消息waitUntilAllOperationsAreFinished。這樣你就可以序列化操作而不是將隊列定義爲串行。

+0

您是否認爲需要爲每個操作添加依賴鏈? – yershuachu 2015-07-24 10:12:46

+3

我不認爲將maxConcurrentOperation設置爲1會使操作序列化,如果按序列化,則表示操作在隊列中的順序得到維護。爲了維護插入順序,您必須添加操作之間的依賴關係。 NSOpeationQueue默認是併發的,並且操作被選擇執行的順序不會被維護。例如:如果操作排隊爲1,2,3,4,那麼它們可能會以2,3,1,4的順序被執行。 – 2016-11-23 00:57:47

+0

@KunalShrivastava是對的。 ['如果操作對象的執行順序對你很重要,那麼在將操作添加到隊列之前,應該使用依賴關係來建立該順序。](https://developer.apple.com/library/content/documentation/通用/概念/ ConcurrencyProgrammingGuide/OperationObjects/OperationObjects.html#// apple_ref/DOC/UID/TP40008091-CH101-SW38) – DanSkeel 2017-12-06 19:51:54