Swift 是完美支持GCD的骑晶,由于Swift的發(fā)展寫法也一直在變動耻煤,下面列舉一些常見的用法隐砸。
全局隊列異步執(zhí)行
print("before" + "\(Thread.current)")
// 全局隊列異步執(zhí)行
DispatchQueue.global().async {
sleep(1)
print("asyncTask" + "\(Thread.current)")
}
// 全局隊列同步執(zhí)行
DispatchQueue.global().sync {
print("syncTask" + "\(Thread.current)")
}
print("after" + "\(Thread.current)")
// 執(zhí)行結(jié)果
before<NSThread: 0x600000262d80>{number = 1, name = main}
syncTask<NSThread: 0x600000262d80>{number = 1, name = main}
after<NSThread: 0x600000262d80>{number = 1, name = main}
asyncTask<NSThread: 0x608000265b00>{number = 3, name = (null)}
可以看出同步執(zhí)行時并沒有重新開辟線程
GCD 常用模板
print("before" + "\(Thread.current)")
// 全局異步
DispatchQueue.global().async {
print("task" + "\(Thread.current)")
//主線程異步執(zhí)行 刷新UI
DispatchQueue.main.async {
print("UI - task" + "\(Thread.current)")
}
}
print("after" + "\(Thread.current)")
// 打印結(jié)果
before<NSThread: 0x60800007d780>{number = 1, name = main}
after<NSThread: 0x60800007d780>{number = 1, name = main}
task<NSThread: 0x608000268e40>{number = 3, name = (null)}
UI - task<NSThread: 0x60800007d780>{number = 1, name = main}
日常使用以上模板足夠了膝捞。