maxConcurrentOperationCount = 1 的 NSOperation 和 NSOperationQueue

NSOperation and NSOperationQueue with maxConcurrentOperationCount = 1

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

现在还需要在子类 NSOperation 中设置 concurrent to YES 使其串行化吗?

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

根据我阅读 Apple's documentation 的方式,NSOperation 中的 concurrent 属性 是只读的,并告诉我们该操作是否会 运行 异步。如果您计划手动启动操作,则需要为 asynchronous 设置 NSOperation return YES 以避免阻塞您启动操作的线程。 concurrent 属性 仅用于监视操作状态,如果您 运行 手动

如果您将 NSOperation 添加到 NSOperationQueue,队列将忽略 asynchronous属性 和 运行 操作的值到 maxConcurrentOperationCount.

所以,回答你的问题:如果你 运行 手动操作所有操作,并将 asynchronous 设置为 YES,则并行操作数 运行ning将取决于每次调用 start 操作之间的延迟有多大,以及完成它们需要多长时间。如果将它们添加到队列中,您的队列将 运行 作为串行队列一个接一个地执行操作。

简短的回答是否定的,如果您使用 NSOperationQueue,则不必设置 asynchronous 属性 或检查 concurrent。如果将它们添加到队列中,则适用队列规则。所以如果你设置 maxConcurrentOperationCount = 1 那么你将有一个串行队列。