ios - iOS 中的调度队列名称是否出于调试以外的任何原因有意义?

标签 ios swift concurrency

我想知道这样的声明:

let queue = DispatchQueue(label: "com.example.imagetransform")

我正在观看 WWDC Concurrency with Swift 3,上面的演示者提到队列的标签显示在调试器中。我想知道,除此之外,名称对于引用该队列是否有意义或有用,或者这些队列是否遵循与其他类型的数据结构相同的范围规则(以便队列声明仅在其范围内有意义)。

即使队列声明仅在其范围内有意义,如果我这样做会发生什么?

let queue1 = DispatchQueue(label: "com.example.imagetransform")
let queue2 = DispatchQueue(label: "com.example.imagetransform")

这些队列实际上是相同的吗?如果我先说向队列 1 添加一个作业,然后向队列 2 添加一个作业,那么队列 2 的作业实际上与队列 1 的作业在同一行吗?

最佳答案

Are dispatch queue names in iOS meaningful for any reason other than debugging?

它们的主要目的是为了调试。理论上您可以将它用于其他目的(它可以通过 label 属性访问),但建议仅将它用于诊断目的。

Are these queues actually the same so that if I first say add a job to queue1 and then add a job to queue2, is queue2's job is actually on the same line as queue1's job?

不,它们是不同的队列,提交给其中一个的任务与提交给另一个的任务绝对无关。它们恰好具有相同的名称,这只会让调试变得更加困惑。

我们中的大多数人都倾向于给它们命名,这些名称仍然可以捕捉功能意图,但使它们独一无二以简化调试,例如:

let queue1 = DispatchQueue(label: "com.example.imagetransform.1")
let queue2 = DispatchQueue(label: "com.example.imagetransform.2")

关于ios - iOS 中的调度队列名称是否出于调试以外的任何原因有意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38489493/

相关文章:

c# - 如何获取 "Everyone"的 IdentityReference 以在本地化系统上创建 MutexAccessRule?

ios - 如何使用 UIGestureRecognizers 相对于触摸位置旋转 UIScrollView 内的 UIImageView

iOS视频文件在应用程序启动时自动播放

concurrency - 如何在 Windows Azure 上使用我的辅助角色中的所有核心?

ios - 使用选择日期快速更新 FSCalendar header 值

ios - 使用 Swift 在 iOS 中将 Date() 对象设置为当前时间

c# - 在并行任务与异步任务上使用 Task.Wait

ios - 使用 NSUserDefaults 在 SWIFT 中添加 24 小时倒计时器

ios - 如何在 UITableView 中展开和折叠特定级别的行?

swift - 无法分配来自 UITextInputTraits 的属性