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