繁体   English   中英

向主线程分配工作的两种方式(CGD和NSOperationQueue)是否等效?

[英]Whether those two ways of dispatching work to main thread (CGD and NSOperationQueue) are equivalent?

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

 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]将在每次操作后进行绘制。

要对此进行全面,深入的研究,请在此处查看我的答案。

从根本上说,它们不是同一件事。

是的,操作队列方法将在GCD队列上安排。 但是,它也获得了使用操作队列的所有丰富好处,例如添加依赖操作的简便方法。 状态观察; 取消操作的能力…

所以不,它们不是等效的。

是的,GCD和NSOperation有所不同。
GCD轻巧可用于赋予多线程风味,如加载配置文件图片,加载网页,最早最早返回的网络调用。

NSOperation队列
1.通常用于进行繁重的网络通话,整理数千条记录等。
2.可以添加,删除,获取任何操作的当前状态
3.添加完成处理程序
4.获取操作计数等

与GCD相比具有更多优势

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM