一、全称是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顺序不确定
});
原文:http://www.cnblogs.com/zhouyi-ios/p/5223968.html