也就是说,如果我们几次排队同样的事情就不会有并发性。 我们首先排队的那个将首先被执行。
我的意思是只有一个主线程吗?
答案 0 :(得分:6)
我在这里找到了一个很好的答案:
NSOperationQueue and concurrent vs non-concurrent
因此,您可以随时设置所有添加的操作序列:
[[NSOperationQueue mainQueue] setMaxConcurrentOperationCount:1];
答案 1 :(得分:2)
答案是......是和否
当您创建要添加到队列的新NSOperation时,可以使用
- (void)setQueuePriority:(NSOperationQueuePriority)priority
根据文档,队列将使用此优先级,并将其他因素作为依赖关系来决定接下来将执行的操作。
只要您的操作具有相同的优先级并且没有操作间依赖性,它们应该按照您添加它们的相同顺序执行,也可以在它们之间插入其他与系统相关的操作。
答案 2 :(得分:1)
NSOperationQueue
类规定了一组NSOperation
个对象的执行。添加到队列后,操作将保留在该队列中,直到明确取消或完成其任务为止。 队列中的操作(但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。应用程序可以创建多个操作队列并向其中任何一个提交操作。操作间依赖关系为操作提供绝对执行顺序,即使这些操作位于不同的操作队列中也是如此。在所有相关操作完成执行之前,操作对象不被视为准备执行。 对于准备执行的操作,操作队列始终执行相对于其他就绪操作具有最高优先级的操作。有关如何设置优先级和依赖关系的详细信息,请参阅NSOperation Class Reference。
虽然您通常通过将操作添加到操作队列来执行操作,但不需要这样做。也可以通过调用其start方法手动执行操作对象,但这样做并不能保证操作与其余代码同时运行。
isConcurrent
类的NSOperation
方法告诉您操作是否与调用其start方法的线程同步或异步运行。 默认情况下,此方法返回NO,表示操作在调用线程中同步运行。当您向操作队列提交非并发操作时,队列本身会创建一个运行操作的线程。因此,向操作队列添加非并发操作仍会导致操作对象代码的异步执行。
所以,如果我理解正确,这将不会并发。