GCD-Swift 3 常见用法

Swift 是完美支持GCD的,由于Swift的发展写法也一直在变动,下面列举一些常见的用法。

全局队列异步执行

print("before" + "\(Thread.current)")
// 全局队列异步执行
DispatchQueue.global().async {
    sleep(1)
    print("asyncTask" + "\(Thread.current)")
}
// 全局队列同步执行
DispatchQueue.global().sync {
    print("syncTask" + "\(Thread.current)")
}
print("after" + "\(Thread.current)")

// 执行结果
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)}

可以看出同步执行时并没有重新开辟线程

GCD 常用模板

print("before" + "\(Thread.current)")

// 全局异步
DispatchQueue.global().async {
    print("task" + "\(Thread.current)")
    //主线程异步执行 刷新UI
    DispatchQueue.main.async {
        print("UI - task" + "\(Thread.current)")
    }
}
print("after" + "\(Thread.current)")

// 打印结果
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}

日常使用以上模板足够了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 尽管 Grand Central Dispatch (GCD)已经存在一段时间了,但并非每个人都知道怎么使用它。这...
    coderFamer阅读 12,131评论 1 16
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,227评论 4 61
  • 在这篇文章中,我将为你整理一下 iOS 开发中几种多线程方案,以及其使用方法和注意事项。当然也会给出几种多线程的案...
    张战威ican阅读 3,754评论 0 0
  • 学习多线程,转载两篇大神的帖子,留着以后回顾!第一篇:关于iOS多线程,你看我就够了 第二篇:GCD使用经验与技巧...
    John_LS阅读 3,816评论 0 3
  • 5月20/21的二建考试,在长沙的这四天让我越来越想回来了,整个空气中都透露出熟悉的味道。但对于职业的选择让我越来...
    0890b13f3465阅读 812评论 0 0