我想用NSOperationQueue实现一个串行队列。所以我为我的NSOperationQueue设置了maxConcurrentOperationCount = 1
。
现在有几个问题
现在我是否还需要在子类NSOperation中设置concurrent to YES
以使其成为串行?
如果我为NSOperation设置并发为YES,虽然maxConcurrentOperationCount是1但是我仍然可以并行运行2个或更多NSOperations吗?
答案 0 :(得分:3)
根据我阅读Apple's documentation的方式,NSOperation中的concurrent
属性是只读的,并告诉我们操作是否会异步运行。如果您计划手动启动操作,则需要使您的NSOperation为asynchronous
返回YES,以避免阻止您开始操作的线程。如果您手动运行它,concurrent
属性仅用于监视操作的状态
如果要将NSOperation
添加到NSOperationQueue
,则队列将忽略asynchronous
属性的值,并根据maxConcurrentOperationCount
运行操作。
所以,回答你的问题:如果你手动运行所有操作,并将asynchronous
设置为YES
,并行运行的操作数将取决于每次之间的延迟有多大你打电话给start
进行操作,以及完成它们需要多长时间。如果将它们添加到队列中,您的队列将逐个运行操作,作为串行队列。
答案 1 :(得分:0)
简短回答是否定,如果您使用NSOperationQueue
,则不必设置asynchronous
属性或检查concurrent
。如果将它们添加到队列中,则应用队列规则。因此,如果您设置maxConcurrentOperationCount = 1
,那么您将拥有一个串行队列。