除了调试以外,iOS中的调度队列名称是否有意义吗?

hel*_*loB 6 concurrency ios swift

我想知道这样的声明:

let queue = DispatchQueue(label: "com.example.imagetransform")
Run Code Online (Sandbox Code Playgroud)

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

即使队列声明仅在其范围内有意义,如果执行此操作会怎样?

let queue1 = DispatchQueue(label: "com.example.imagetransform")
let queue2 = DispatchQueue(label: "com.example.imagetransform")
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*Rob 5

iOS 中的调度队列名称除了调试之外还有其他意义吗?

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

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

不,它们是不同的队列,提交给一个队列的任务与提交给另一个队列的任务完全无关。它们只是碰巧具有相同的名称,这只会让调试变得更加混乱。

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

let queue1 = DispatchQueue(label: "com.example.imagetransform.1")
let queue2 = DispatchQueue(label: "com.example.imagetransform.2")
Run Code Online (Sandbox Code Playgroud)


Rob*_*ier 3

标签就像它所说的那样:一个标签。它没有语义,也不影响范围。它纯粹是“供您参考”(在大多数情况下意味着“调试”)。