一 . 什么是 GCD
GCD (Grand Central Dispatch) :是一套底层的 API , 它主要是将允许程序将任务切分成多个单一的任务 ,然后提交至队列来进行并发或窜行的执行方法 。GCD 与block 是在IOS 4.0 引用的,不支持 4.0 以下的系统 。
二 . dispatch async 与 dispatch sync 方法的介绍
dispatch async 异步执行方法 ,不会等待block块中的方法 执行完成才继续向下执行 ;
dispatch sync 同步执行方法 ,会等待block 中的方法执行完成后,才继续向下执行 ;
-----------------------------------async-------------------------------------
NSLog(@"dispatch_async 1");
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"dispatch_async 2");
[NSThreadsleepForTimeInterval:3];
NSLog(@"dispatch_async 3");
});
NSLog(@"dispatch_async 4");
2015-07-15 21:34:22.829 GrandCentralDispatch__GCD[667:18394] dispatch_async 1
2015-07-15 21:34:22.829 GrandCentralDispatch__GCD[667:18394] dispatch_async 4
2015-07-15 21:34:22.849 GrandCentralDispatch__GCD[667:18394] dispatch_async 2
2015-07-15 21:34:25.851 GrandCentralDispatch__GCD[667:18394] dispatch_async 3
----------------------------------------------------------------------------
三. GCD队列
GCD 有三种队列 ; 主队列/全局队列/自创建队列
主队列:与主线程功能相同 ,程序启动时自定生成 ,无法创建 ;
调用方法 dispatch_get_main_queue ;
dispatch_queue_t main_:queue = dispatch_get_main_queue ( ) ; // main_queue为创建的队列;
全局队列 : 全局队列为并发队列,由整个进程共享,进程中存在三个队列,分别为高 /中 / 默认 /三个优先级队列 , 可以通过 dispatch_get_global_queue 的函数 传入优先级来访问队列 ;
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
dispatch_queue_t queue2 =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH,0);
dispatch_queue_t queue3 =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW,0);
// 可以在所有方法执行完成之后在执行主线方法
dispatch_queue_t queue1 = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue1, ^{
[NSThread sleepForTimeInterval:5];
NSLog(@"第一阶段执行完毕");
});
dispatch_group_async(group, queue1, ^{
[NSThread sleepForTimeInterval:10];
NSLog(@"第二阶段执行完毕");
});
dispatch_group_async(group, queue1, ^{
[NSThread sleepForTimeInterval:15];
NSLog(@"第三阶段执行完毕");
});
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"全部阶段执行完毕");
});
2015-07-15 21:25:51.851 GrandCentralDispatch__GCD[504:14673] 第一阶段执行完毕
2015-07-15 21:25:56.850 GrandCentralDispatch__GCD[504:14676] 第二阶段执行完毕
2015-07-15 21:26:01.854 GrandCentralDispatch__GCD[504:14674] 第三阶段执行完毕
2015-07-15 21:26:01.855 GrandCentralDispatch__GCD[504:14493] 全部阶段执行完毕