一、关于
直接贴官方文档:
解析:
1、系统、全面地提升并行代码在多核的性能;
2、更好地调度系统资源;
3、使用GCD之前,考虑使用Cocoa类似的功能(via NSOperation and block objects)会比较简单或更适合应用开发。附:
二、队列
介绍
官方文档:
![]()
注意:修改UI的操作,都应该在主队列中处理;否则,会导致UI操作的延迟。有三种获得方式:
1、dispatch_main_queue;主队列,串行的。2、dispatch_get_global_queue::;全局队列,并行的。
3、dispatch_queue_create::;自定义队列,串行或并行。
1、The main queue
2、The global queue
附:优先级
3、Other queue
三、函数
1、(异步)dispatch_async::
代码实现
// 使用系统的全局队列,优先级高于标准。
var queue = dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0)
dispatch_async(queue, { () -> Void in
// code..
// 在主线程上修改UI。
dispatch_async(dispatch_get_main_queue(), { () -> Void in
// code..
})
})
2、(异步)dispatch_after:::
该函数主要用作优化、提升性能。
注意:建议使用主队列。
附:时间参数
苹果建议用的转换单位:
代码实现
// 3秒时间。
var time = dispatch_time(DISPATCH_TIME_NOW, (Int64)(NSEC_PER_SEC * 3))
// 苹果建议放到主队列,因为此函数一般用于操作UI。
dispatch_after(time, dispatch_get_main_queue()) { () -> Void in
// code..
}
3、(同步)dispatch_apply:::
该函数主要用作优化、提升性能。
一般使用系统全局队列。
使用场合:1、耗时;2、循环次数少;3、由于同步,可结合异步函数使用。
代码实现
dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), { () -> Void in
dispatch_apply(3, dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)) { (index) -> Void in
// code..
}
})