标签:
1. 基本概念
- 同步:执行完再返回
- 异步:直接返回
- 并行:queue中的任务可同时进行
- 串行:queue 中的任务按顺利进行(fifo)
2. 常用的几种queue
a. main queue ,主线程,有关ui的操作在这个queue中进行,否则可能没有反应
dispatch_get_main_queue()
b. global queue, 系统提供的并行queue
dispatch_get_global_queue ( long identifier, unsigned long flags )
c . 自己创建queue(一般自己创建的都是串行的,因为并行的直接用global queue即可)
dispatch_queue_t dispatch_queue_create ( const char *label, dispatch_queue_attr_t attr );
3. 几种常见的queue task
dispatch_async :异步执行
dispatch_syn :同步执行
dispatch_after(dispatch_time_t when,dispatch_queue_t queue, block)
在将来的某个时刻(when),异步执行 block;
when 可用dispatch_time ( dispatch_time_t when, int64_t delta )函数获取,这里如果when 设置为DISPATCH_TIME_NOW,则为目前的时间+delta
dispatch_apply(size_t iteration,dispatch_queue_t queue, void(^block)(size_t))
多次同步执行block,全部执行完之后,函数才返回,
如果queue为global queue,则并行调用block
dispatch_once(dispatch_once_t *predicate, block)
app生命周期内,仅执行一次block,在创建单例的时候很有用
4. 用GCD 创建timer
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, <#dispatchQueue#>); dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, <#intervalInSeconds#> * NSEC_PER_SEC, <#leewayInSeconds#> * NSEC_PER_SEC); dispatch_source_set_event_handler(timer, ^{ <#code to be executed when timer fires#> }); dispatch_resume(timer); // INVALIDATE dispatch_source_cancel(<#dispatch_source_t source#>)
5.如何取消queue中的任务
GCD 很难取消queue中的任务,基本把任务加入queue之后,用户就不能掌控了,
如果需要取消queue中的任务,使用NSOperationQueue ,这个类中有方法取消operaiton
标签:
原文地址:http://www.cnblogs.com/beddup/p/4621577.html