我是GCD和线程的新手。我已经完成了教程并且非常困惑。 有人可以用简单的话来解释。请不要建议苹果开发者链接..
提前致谢!
答案 0 :(得分:14)
NSOperationQueue可能更适合可能需要取消或具有复杂依赖关系的长时间运行操作。对于应该具有最低性能和内存开销的短任务,GCD调度队列更好。
可以取消已在NSOperationQueue中排队的操作(只要操作支持它)。当您将一个块排入GCD调度队列时,它肯定会在某个时刻执行。
请查看以下链接,它可能会对您有所帮助。
答案 1 :(得分:1)
GCD
低于NSOperationQueue
,其主要优势在于其实现非常轻量级,并专注于无锁算法和性能。
通常,您应该使用最适合您需求的抽象级别。这意味着您通常应使用NSOperationQueue
代替GCD
。 NSOperationQueue
使您可以更好地控制操作的执行方式。
答案 2 :(得分:1)
操作为我们提供了对任务的更多控制,例如我们可以在需要时取消特定操作或同时取消所有操作。但是无法使用调度队列来完成同一件事。
进一步的调度队列适用于 FIFO 的概念,而操作不会 。>
对于操作,我们可以确定任务的优先级并对其进行控制,例如通过定义任务的优先级来像先执行哪个任务,最后执行哪个任务。
这可以通过将名为“ queuePriority”的属性设置为非常低,很低,正常,很高,非常高来完成。可以通过 Operations 操作来完成许多其他事情,而不是通过 Dispatch Queues 。
对于 Operations ,我们无法按顺序进行操作,因为它们默认为并发,但是这也可以通过添加彼此之间的操作依赖性来实现,例如 operation 2 依赖于操作1 ,而操作3 依赖于操作2。因此,它们将顺序执行。