【问题标题】:Are dispatch queue names in iOS meaningful for any reason other than debugging?除了调试之外,iOS 中的调度队列名称是否有意义?
【发布时间】:2016-11-24 04:13:42
【问题描述】:

我想知道这样的声明:

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

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

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

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

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

【问题讨论】:

  • 不...如果您愿意,可以将其命名为“Cheeseburger.Hotdog.FrenchFries”

标签: ios swift concurrency


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    这些队列实际上是否相同,所以如果我先说向queue1 添加一个作业,然后向queue2 添加一个作业,那么queue2 的作业实际上与queue1 位于同一行'有工作吗?

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      相关资源
      最近更新 更多