2015-05-07 105 views
2

我想實現一個帶有NSOperationQueue的串行隊列。因此我爲我的NSOperationQueue設置了maxConcurrentOperationCount = 1。 所以現在的問題夫婦NSOperation和NSOperationQueue maxConcurrentOperationCount = 1

現在我還需要在子類NSOperation中設置concurrent to YES使其序列?

如果我爲NSOperation設置爲YES,儘管maxConcurrentOperationCount爲1,我仍然可以有兩個或多個NSOperations並行運行?

回答

3

根據我如何閱讀Apple's documentation,NSOperation中的concurrent屬性是隻讀的,並告訴我們該操作是否將異步運行。如果您打算手動開始操作,則需要讓您的NSOperation返回YES以獲得asynchronous以避免阻止您開始操作的線程。該concurrent屬性只是用來監測運行狀態,如果你手動運行它們

如果要添加您的NSOperationNSOperationQueue,隊列會忽略asynchronous屬性的值,並運行操作根據maxConcurrentOperationCount

因此,要回答你的問題:如果你手動運行所有的操作,並設置asynchronousYES,並行運行操作的數量將取決於延遲是每次調用上您的操作start時間之間有多大,以及完成它們需要多長時間。如果將它們添加到隊列中,您的隊列將作爲串行隊列逐個運行這些操作。

0

簡短回答是否,如果您使用NSOperationQueue您不必設置asynchronous屬性或檢查concurrent。如果將它們添加到隊列中,則應用隊列規則。所以如果你設置了maxConcurrentOperationCount = 1那麼你將有一個串行隊列。

相關問題