18

我对 GCD 和线程非常陌生。我已经阅读了教程并且非常困惑。有人可以用简单的话解释一下吗?请不要建议苹果开发者链接..

提前致谢 !

4

3 回答 3

18

NSOperationQueue 可以更适合可能需要取消或具有复杂依赖关系的长时间运行的操作。GCD 调度队列更适合那些应该具有最低性能和内存开销的短任务。

可以取消已在 NSOperationQueue 中排队的操作(只要操作支持它)。当你在 GCD 调度队列中加入一个块时,它肯定会在某个时候被执行。

检查下面的链接,它可能对你有帮助。

iOS 应用程序的操作队列与调度队列

于 2013-07-11T11:25:53.017 回答
3

操作为我们提供了对任务的更多控制,就像我们可以随时取消特定操作或同时取消所有操作一样。但是同样的事情不能使用Dispatch Queues来完成。

进一步的Dispatch Queues在FIFO的概念上起作用,而Operations没有

对于操作,我们可以对任务进行优先级排序,并通过定义它们的优先级来控制它们,比如首先执行哪个任务,最后执行哪个任务。

这是通过将名为“queuePriority”的属性设置为非常低、低、正常、高、非常高来完成的。许多其他这样的事情可以通过操作而不是调度队列来完成。

使用操作,我们不能连续执行操作,因为它们默认是并发的,但这也可以通过添加操作相互依赖来实现,例如操作 2依赖于操作 1操作 3依赖于操作 2。因此,通过这样做,他们将串行执行。

于 2019-01-10T14:05:29.893 回答
2

GCD比 低级NSOperationQueue,它的主要优点是它的实现非常轻量级,并且专注于无锁算法和性能。

通常,您应该使用适合您需要的最高抽象级别。这意味着您通常应该使用NSOperationQueue而不是GCD. NSOperationQueue使您可以更好地控制操作的执行方式。

于 2013-07-11T11:40:18.090 回答