初步多线程(GCD)_1

1. 常用方法: 

    (1)block定义: --  block语法

              a) 声明:

              b) 定义:

              c) 调用:

      (2) GCD (系统方法相关)

               a) 基础:

                      i.    后台执行

                     ii.    主线程执行

                    iii.    一次性执行 --- dispatch_once_t必须是全局或static变量

                    iv.    延迟2秒执行


dispatch_after是延迟提交,不是延迟运行,所以想用dispatch_after精确控制运行状态的朋友可要注意了~


               b) 自定义queue: --- 创建串/并行队列 --- 注意第二个参数

初步多线程(GCD)_1_第1张图片

              c) dispatch_group --- 使用dispatch_group_async函数将多个任务关联到一个dispatch Group和相应的queue中,group会并发地同时执行这些任务。(会阻塞线程)

                     i. 自己创建队列:

初步多线程(GCD)_1_第2张图片

dispatch_group_notify函数用来指定一个额外的block,该block将在group中所有任务完成后执行。                   


                    ii. 无法直接使用队列变量 --- 使用AFNetworking添加异步任务

初步多线程(GCD)_1_第3张图片

            使用dispatch_group_enter,dispatch_group_leave就可以方便的将一系列网络请求“打包”起来~


           d) dispatch_suspend && dispatch_resume --- 提供了 “挂起、恢复” 队列的功能。


              dispatch_suspend !=立即停止队列的运行,不能保证可以立即停止队列上正在运行的block。


初步多线程(GCD)_1_第4张图片


           e) dispatch_apply --- 在一个队列(串行或并行)上“运行”多次block

初步多线程(GCD)_1_第5张图片

          dispatch_apply确实会“等待”其所有的循环运行完毕才往下执行,会将主线程阻塞。



GCD 通过用dispatch barriers创建一个读者写者锁提供了一个优雅的解决方案。

            f) dispatch_barrier_async && dispatch_barrier_sync 

            向某个队列插入一个block,当目前正在执行的block运行完成后,阻塞这个block后面添加的block,只运行这个block直到完成,然后再继续后续的任务。

初步多线程(GCD)_1_第6张图片

dispatchbarrier  (a)sync只在自己创建的并发队列上有效,在全局(Global)并发队列、串行队列上,效果跟dispatch_(a)sync效果一样。


           

          h) dispatch_set_context与dispatch_set_finalizer_f的配合使用 --- 为队列添加上下文数据。

         因为GCD是C语言接口形式,所以要用malloc/new/OC对象(__bridge关键字)创建。

同时,要用free/delete/CFRelease释放内存。

初步多线程(GCD)_1_第7张图片


2. 引文:


(1)Grand Central Dispatch 基础教程:Part 1 --- 连续&并发,同步&异步,并发&并行,队列等基础知识,特别适合入门和对知识体系的梳理。

(2)iOS开发进阶/唐巧 --- GCD的便利性 和 GCD方法的简单使用。

(3)多线程编程 - GCD --- 细节介绍的很到位,实例也很贴切。

(4)GCD使用经验与技巧浅谈 --- GCD使用中的注意事项 和 一些 “坑”。


==================================================

GCD 扫盲篇

Parse源码浅析系列(一)---Parse的底层多线程处理思路:GCD高级用法

你可能感兴趣的:(初步多线程(GCD)_1)