NSOperation和NSOperationQueue,maxConcurrentOperationCount = 1

时间:2015-05-07 16:18:54

标签: ios nsoperation nsoperationqueue

我想用NSOperationQueue实现一个串行队列。所以我为我的NSOperationQueue设置了maxConcurrentOperationCount = 1。 现在有几个问题

现在我是否还需要在子类NSOperation中设置concurrent to YES以使其成为串行?

如果我为NSOperation设置并发为YES,虽然maxConcurrentOperationCount是1但是我仍然可以并行运行2个或更多NSOperations吗?

2 个答案:

答案 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,那么您将拥有一个串行队列。