Ios [NSOperationQueue mainQueue]是否保证为串行?

Ios [NSOperationQueue mainQueue]是否保证为串行?,ios,objective-c,xcode4.5,nsoperationqueue,Ios,Objective C,Xcode4.5,Nsoperationqueue,也就是说,如果我们对同一件事情进行多次排队,就不会有并发性。 我们首先排队的那个将首先执行 我的意思是只有一个主线程对吗?来自: NSOperationQueue类调节一组NSOperation对象的执行。将操作添加到队列后,操作将保留在该队列中,直到显式取消或完成其任务队列中的操作(但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。一个应用程序可以创建多个操作队列,并向其中任何一个提交操作 操作间依赖关系为操作提供了绝对执行顺序,即使这些操作位于不同的操作队列中。在操作对象的

也就是说,如果我们对同一件事情进行多次排队,就不会有并发性。 我们首先排队的那个将首先执行

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

来自:

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

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

:

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

将非当前操作提交到操作队列时,队列本身会创建一个线程来运行操作。因此,将非当前操作添加到操作队列仍然会导致操作目标代码的异步执行。


因此,如果我理解正确,这里将没有并发。

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

因此,将所有添加的操作设置为串行,您可以随时设置:


[[NSOperationQueue mainQueue]setMaxConcurrentOperationCount:1]

答案是。。。是与否

创建要添加到队列的新操作时,可以使用

- (void)setQueuePriority:(NSOperationQueuePriority)priority
根据文档,队列将使用此优先级和其他因素作为相互依赖关系来决定下一步将执行什么操作


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

mainQueue与另一个NSOperationQueue不同。例如,最大并发操作为1So如果我将我的操作的队列优先级设置为非常低,并将其排入主队列,这是否保证我的操作将始终在所有系统重新执行操作后执行?