首页 > 其他 > 详细

GCD那些事

时间:2016-02-28 06:25:47      阅读:242      评论:0      收藏:0      [点我收藏+]

一、全称是Grand Central Dispatch

二、GCD优势

1、GCD是苹果为多核的并行运算解决的方案。

2、GCD会自动利用更多的CPU内核(比如双核、四核)。

3、GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)。

三、执行步骤

1、定制任务。执行什么操作。

2、将任务添加到队列中。GCD会自动将队列中的任务取出,放到对应的线程中执行。任务的取出遵循FIFO原则:先进先出,后进后出。

四、主要概念

1、同步。只能在当前线程中执行任务,不具备开启新线程的能力。

2、异步。具备开启新线程的能力。

3、并发。可以让多个任务同时进行,自动开启多个线程执行任务。并发功能只有在异步函数中才有效。使用dispatch_queue_create()函数创建并发队列。使用dispatch_get_global_queue函数获得全局的并发队列。

4、串行。让任务一个接着一个地执行,使用dispatch_queue_create创建串行队列。主队列是GCD自带的一种特殊的串行队列,放到主队列中的任务,都会放到主线程中执行,使用dispatch_get_mian_queue()获得主队列。

五、队列类型

1、同步并发。没有开启新线程,串行执行任务。

2、同步串行。没有开启新线程,串行执行任务。

3、同步主队列。没有开启新线程,串行执行任务。

4、异步并发。开启新线程,并发执行任务。

5、异步串行。开启一条新线程,串行执行任务。

6、异步主队列。没有开启新线程,串行执行任务。

六、其他方法

1、前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行。

dispatch_barrier_async(dispatch_queue_t queue, dispatch_block_t block);

2、延时执行

[self performSelector:@selector(run) withObject:nil afterDelay:2.0];

或是

dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(2.0*NSEC_PER_SEC)),

  dispatch_get_main_queue(), ^{

  // 将2秒后需执行的任务......

});

或是

[NSTimer scheduledTimerWithTimerInterval:2.0 target:self selector:@selector(test) userInfo:nil repeats:No];

3、一次性代码

保证某段代码在程序运行过程中只被执行1次

static dispatch_once_t onceToken;

dispatch_once(&onceToken,^{

  // 将只被执行一次的任务......

}); 

4、遍历

能进行快速迭代遍历

dispatch_apply(10,  dispatch_get_global_queue(0,0), ^(size_t index){

  // 执行10次代码,index顺序不确定

});

GCD那些事

原文:http://www.cnblogs.com/zhouyi-ios/p/5223968.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!