我想知道这样的声明:
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的作业位于同一行?
答案 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)
标签正如它所说:标签。它没有语义,也没有对范围的影响。它纯粹是“为了您的信息”(在大多数情况下意味着“调试”)。