[NSOperationQueue mainQueue]是否保证是连续的?

时间:2013-04-04 08:32:42

标签: ios objective-c xcode4.5 nsoperationqueue

也就是说,如果我们几次排队同样的事情就不会有并发性。 我们首先排队的那个将首先被执行。

我的意思是只有一个主线程吗?

3 个答案:

答案 0 :(得分:6)

我在这里找到了一个很好的答案:

NSOperationQueue and concurrent vs non-concurrent

因此,您可以随时设置所有添加的操作序列:

[[NSOperationQueue mainQueue] setMaxConcurrentOperationCount:1];

答案 1 :(得分:2)

答案是......是和否

当您创建要添加到队列的新NSOperation时,可以使用

- (void)setQueuePriority:(NSOperationQueuePriority)priority

根据文档,队列将使用此优先级,并将其他因素作为依赖关系来决定接下来将执行的操作。

只要您的操作具有相同的优先级并且没有操作间依赖性,它们应该按照您添加它们的相同顺序执行,也可以在它们之间插入其他与系统相关的操作。

答案 2 :(得分:1)

来自documentation

  

NSOperationQueue类规定了一组NSOperation个对象的执行。添加到队列后,操作将保留在该队列中,直到明确取消或完成其任务为止。 队列中的操作(但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。应用程序可以创建多个操作队列并向其中任何一个提交操作。

     

操作间依赖关系为操作提供绝对执行顺序,即使这些操作位于不同的操作队列中也是如此。在所有相关操作完成执行之前,操作对象不被视为准备执行。 对于准备执行的操作,操作队列始终执行相对于其他就绪操作具有最高优先级的操作。有关如何设置优先级和依赖关系的详细信息,请参阅NSOperation Class Reference

About threads

  

虽然您通常通过将操作添加到操作队列来执行操作,但不需要这样做。也可以通过调用其start方法手动执行操作对象,但这样做并不能保证操作与其余代码同时运行。 isConcurrent类的NSOperation方法告诉您操作是否与调用其start方法的线程同步或异步运行。 默认情况下,此方法返回NO,表示操作在调用线程中同步运行

     

当您向操作队列提交非并发操作时,队列本身会创建一个运行操作的线程。因此,向操作队列添加非并发操作仍会导致操作对象代码的异步执行。

所以,如果我理解正确,这将不会并发。