Her*_*eis 9 nsoperation grand-central-dispatch ios swift
我正在深入了解并发性,并且已经广泛阅读了关于GCD和NSOperation.然而,许多帖子,如SO上的标准答案都已有几年了.
在我看来,过去的NSOperation主要优势是以某些性能为代价:
由于GCD的DispatchWorkItem&块取消/ DispatchGroup/ qos特别是有一个真正的激励(性价比明智)使用NSOperation时就开始执行或查询任务状态再从那里,你需要能够取消任务的情况下并发分开?
苹果公司似乎更加重视GCD,至少在他们的WWDC中(授予它更近NSOperation).
我看到他们每个人仍然有自己的目的。我最近刚刚重看了 2015 年 WWDC 上关于这个问题的讨论(Advanced NSOperations),我在这里看到了两个要点。
运行时和用户交互
从谈话中:
NSOperations 的运行时间比您预期块的运行时间要长一些,因此块通常需要几纳秒(可能最多一毫秒)来执行。
另一方面,NSOperations 可能会更长,从几毫秒到几分钟不等
他们谈论的示例是在 WWDC 应用程序中,其中存在一个依赖于登录用户的 NSOperation。依赖项 NSOperation 提供一个登录视图控制器并等待用户进行身份验证。完成后,该 NSOperation 完成并且 NSOperationQueue 恢复其工作。我认为您不会想在这种情况下使用 GCD。
子类化
由于 NSOperations 只是类,因此您可以对它们进行子类化以获得更多的可重用性。这对于 GCD 来说是不可能的。
示例:(使用上面的 WWDC 登录场景)
您的代码库中有许多与需要对其进行身份验证的用户交互相关联的 NSOperations。(在本例中,点赞视频。)您可以扩展 NSOperation 来创建 AuthenticatedOperation,然后让所有这些 NSOperation 扩展这个新类。