我很好奇这两种将工作分派到主队列的类型是否相等,或者是否存在一些差异?
dispatch_async(dispatch_get_main_queue()) {
// Do stuff...
}
和
NSOperationQueue.mainQueue().addOperationWithBlock { [weak self] () -> Void in
// Do stuff..
}
最佳答案
有差异,但是有些微妙。
排队到-[NSOperationQueue mainQueue]
的操作在运行循环的每一遍都执行一次操作。这意味着,除其他事项外,操作之间将有一个“抽签”阶段。
使用dispatch_async(dispatch_get_main_queue(),...)
和-[performSelectorOnMainThread:...]
时,所有排队的块/选择器都会一个接一个地调用,而不会旋转运行循环(即,允许绘制视图或类似内容)。执行所有排队的块后,runloop将继续。
因此,对于绘制,将dispatch_async(dispatch_get_main_queue(),...)
和-[performSelectorOnMainThread:...]
批处理操作分成一个绘制过程,而-[NSOperationQueue mainQueue]
将在每次操作后进行绘制。
有关此内容的完整,深入的研究,请参见我的答案over here。
关于ios - 向主线程分配工作的两种方式(CGD和NSOperationQueue)是否等效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35796826/