iOS中的调度队列名称是否因调试之外的任何原因而有意义?

时间:2016-07-20 19:43:05

标签: ios swift concurrency

我想知道这样的声明:

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

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

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

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

这些队列实际上是否相同,以便如果我首先说一个作业添加到queue1然后将作业添加到queue2,那么queue2的作业实际上与queue1的作业位于同一行?

2 个答案:

答案 0 :(得分:2)

  

iOS中的调度队列名称是否因调试以外的其他原因而有意义?

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

  

这些队列实际上是否相同,以便如果我首先向queue1添加作业,然后将作业添加到queue2,那么queue2的作业实际上是相同的作为queue1的工作线?

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

我们中的大多数人倾向于给他们提供仍然可以捕获功能意图的名称,但是使它们成为简化调试的唯一名称,例如:

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

答案 1 :(得分:1)

标签正如它所说:标签。它没有语义,也没有对范围的影响。它纯粹是“为了您的信息”(在大多数情况下意味着“调试”)。