码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发总结(A0)- GCD

时间:2015-07-05 07:03:32      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

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

 

iOS开发总结(A0)- GCD

标签:

原文地址:http://www.cnblogs.com/beddup/p/4621577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!