GCD的好处:
1.GCD是基于C语言的封装3,充分利用了CPU的多核心,节省内存
2.自动管理线程的生命周期(创建线程、调度任务、销毁线程),不需要程序员手动管理
3.程序员只需要告诉GCD需要执行什么任务,不用再编写任何线程管理的代码
任务:放到线程中,需要执行的那段代码
1.同步:不具备开启线程的能力,只能在当前线程执行任务
2.异步:具备开启线程的能力,可以开启其它线程执行任务
队列:执行任务时遵行先进先出的原则
1.并行:可以开启多个线程,执行多个并发任务,但是只能在异步函数中有效
2.串行:让任务一个接着一个的执行
GCD线程之间的通讯
通常情况下,我们是在主线程里进行UI刷新、点击、拖拽、滚动等操作,然后把以一些耗时操作放到其它线程,当其它线程完成了操作,就回到了主线程,那么就用到了线程之间的通讯。
#pragma mark - 将多个耗时操作加到异步队列中,刷新UI
dispatch_group_async :
将代码块dispatch_block_t block放入队列dispatch_queue_t queue中执行;并和调度组dispatch_group_t group相互关联;如果提交到dispatch_queue_t queue中的block全都执行完毕会调用dispatch_group_notify并且dispatch_group_wait会停止等待;
dispatch_group_enter(group)、dispatch_group_leave(group)
dispatch_group_enter(group):相当于引用计数的+1;
dispatch_group_leave(group) :相当于引用计数的-1;这两个是成对存在的。
dispatch_group_notify:
当group中所有的block操作都完成后才会执行,不会阻塞当前调用线程,如果需要阻塞当前调用线程,可使用dispatch_group_wait(group, DISPATCH_TIME_FOREVER);