我很好奇这两种将工作分派到主队列的类型是否相等,或者是否存在一些差异?

 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/

10-12 23:55