[英]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.