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)
我在游乐场(Xcode 7.1)中运行它,结果:
我瘦的结果应该是:
答案 0 :(得分:6)
label
仅用于记录和调试目的。对于documentation:
附加到队列的字符串标签,用于唯一标识它 调试工具,如Instruments,sample,stackshots和crash 报告。因为应用程序,库和框架都可以 创建自己的调度队列,反向DNS命名样式 (com.example.myqueue)是推荐的。此参数是可选的 可以是NULL。
每次调用dispatch_queue_create
函数时,您都在创建一个新队列。函数退出并且最后一个块已完成执行后将释放此队列,因为您只在本地变量中保存引用。
获得变量输出的原因是两个代码块可以并发执行,并且都更新self.time
属性。有时第一次打印在第二次调用将属性设置为1之前执行(因此得到“10,1”),有时在第一次打印执行之前属性已经设置为1,因此得到“1,1”。