如果在GCD中为队列创建相同的名称,它是否是相同的队列?

Leo*_*Leo 2 grand-central-dispatch ios swift

Q1:如果在GCD中为队列创建相同的名称,它是否是相同的队列?

class Sample {
private var time:Int64 = 0
func asyncSerial(time:Int64){
    let queue = dispatch_queue_create("test",DISPATCH_QUEUE_SERIAL)

    dispatch_async(queue){
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, time)
        self.time = time
        print("async:\(self.time)")

        dispatch_after(delayTime, queue){
            print("wait:\(self.time)")

        }
    }

    print("sync:\(self.time)")
}
}

let s = Sample()
s.result(10)
let s2 = Sample()
s1.result(1)
Run Code Online (Sandbox Code Playgroud)

我在游乐场(Xcode 7.1)运行它,结果如下:

同步:100异步:100同步:0异步:1等待:100等待:1

我瘦的结果应该是:

同步:100同步:0异步:100异步:1等待:100等待:1

Pau*_*w11 6

label仅用于记录和调试目的.对于文档:

附加到队列的字符串标签,用于在调试工具(如Instruments,sample,stackshots和崩溃报告)中唯一标识它.由于应用程序,库和框架都可以创建自己的调度队列,因此建议使用反向DNS命名样式(com.example.myqueue).此参数是可选的,可以为NULL.

每次调用该dispatch_queue_create函数时,您都在创建一个新队列.函数退出并且最后一个块已完成执行后将释放此队列,因为您只在本地变量中保存引用.

获得变量输出的原因是两个代码块可以并发执行并且都更新self.time属性.有时第一次打印在第二次调用将属性设置为1之前执行(因此得到"10,1"),有时在第一次打印执行之前属性已经设置为1,因此得到"1,1".