2015-05-07 35 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那么你将有一个串行队列。

相关问题