iOS开发:Swift多线程GCD的使用
2015-12-11 13:35
477 查看
除了上一篇文章说到到NSThread线程,还有一个GCD(Grand Central Dispath),是Apple新开发的一个解决多核编程的解决方案,充分的利用CPU资源,将所有的任务,放到一个任务队列进行调度。 GCD 默认提供了全局的并发队列,供整个应用使用,不需要创建。
同步和异步的区别
dispatch_sync 同步:不具备开启线程的能力
dispatch_async 异步 :具备开启线程的能力
任务的执行方式
并发队列:多个任务同时执行,并发只能在一步函数下才执行 “异步“
串行队列:让任务一个接一个的运行
注意:一般在实际开发中最常用的是 dispatch_async 。
下面介绍几种常用的队列使用
一:最最常用的全局并发队列:
二:串行队列,队列中的任务不会并发执行,会一个任务执行完成后再执行另外一个任务
三:GCD线程间的通信,通常用于子线程请求完数据,回到主线程更新UI
四:线程延时执行
五:一次性代码,顾名思义,在应用生命周期内,block里代码块只会执行一次。
六:队列组:将一些任务放进一个队列组,当所有任务执行完成后,会执行组的notify。
完!
同步和异步的区别
dispatch_sync 同步:不具备开启线程的能力
dispatch_async 异步 :具备开启线程的能力
任务的执行方式
并发队列:多个任务同时执行,并发只能在一步函数下才执行 “异步“
串行队列:让任务一个接一个的运行
注意:一般在实际开发中最常用的是 dispatch_async 。
下面介绍几种常用的队列使用
一:最最常用的全局并发队列:
//获取全局并发队列 let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //将任务添加到队列中 并发执行 dispatch_async(queue) { () -> Void in //doSomething...任务1 } dispatch_async(queue) { () -> Void in //doSomething...任务2 } dispatch_async(queue) { () -> Void in //doSomething...任务3 } //暂停一个队列 dispatch_suspend(queue) //继续队列 dispatch_resume(queue)
二:串行队列,队列中的任务不会并发执行,会一个任务执行完成后再执行另外一个任务
//创建串行队列 let serialQueue = dispatch_queue_create("dispatch_queue_name", nil) //将任务添加到队列中 一个任务执行完成后再执行另一个任务 dispatch_async(serialQueue) { () -> Void in //doSomething... 任务1 } dispatch_async(serialQueue) { () -> Void in //doSomething... 任务2 } dispatch_async(serialQueue) { () -> Void in //doSomething... 任务3 }
三:GCD线程间的通信,通常用于子线程请求完数据,回到主线程更新UI
//线程间通信 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { () -> Void in // 在子线程做一些事情 dispatch_async(dispatch_get_main_queue(), { () -> Void in //在主线程更新UI... }) }
四:线程延时执行
//线程延时执行 let second:Double = 3.0 let dtime = dispatch_time(DISPATCH_TIME_NOW, Int64(second * Double(NSEC_PER_SEC))) //3s后回到主线程中执行任务 dispatch_after(dtime, dispatch_get_main_queue()) { () -> Void in } //3s后会开启一个新的线程执行队列中的任务 dispatch_after(dtime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { () -> Void in }
五:一次性代码,顾名思义,在应用生命周期内,block里代码块只会执行一次。
var once:dispatch_once_t = 0 dispatch_once(&once, { () -> Void in //在应用生命周期内只执行一次 })
六:队列组:将一些任务放进一个队列组,当所有任务执行完成后,会执行组的notify。
/**********************************队列组******************************************/ let group = dispatch_group_create() let groupQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_group_async(group, groupQueue){ () -> Void in //任务1 } dispatch_group_async(group, groupQueue){ () -> Void in //任务2 } dispatch_group_async(group, groupQueue){ () -> Void in //任务3 } dispatch_group_notify(group, groupQueue) { () -> Void in // 会等任务1、任务2、任务3执行完毕后执行 }
完!
相关文章推荐
- Swift 用Delegate和Block实现回调的Demo
- iOS开发:Swift多线程NSThread的使用
- swift - tableView数据向上收缩动画
- swift - 歌曲列表动画
- Swift正在使用NSURLConnection异步下载同步(实例解析)
- Swift - 闭包的介绍及用法(以数组排序为例)
- Swift语法
- 探讨Swift数组和字典
- 《从零开始学Swift》学习笔记(Day 47)——final关键字
- 《从零开始学Swift》学习笔记(Day 47)——final关键字
- 窥探Swift之数组与字典
- The beginning iOS8 Programming with Swift 中文翻译 - 7
- Swift中的willSet与didSet
- swift入门一:设置window
- iOS swift中取枚举类型原始值的方法
- swift - 动画学习
- swift 学习资源 大集合
- Swift中的断言assert
- 使用swift集成移动广告聚合平台
- swift学习3 数据类型的可选值 optional type