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: --- 创建串/并行队列 --- 注意第二个参数
c) dispatch_group --- 使用dispatch_group_async函数将多个任务关联到一个dispatch Group和相应的queue中,group会并发地同时执行这些任务。(会阻塞线程)
i. 自己创建队列:
dispatch_group_notify函数用来指定一个额外的block,该block将在group中所有任务完成后执行。
ii. 无法直接使用队列变量 --- 使用AFNetworking添加异步任务
使用dispatch_group_enter,dispatch_group_leave就可以方便的将一系列网络请求“打包”起来~
d) dispatch_suspend && dispatch_resume --- 提供了 “挂起、恢复” 队列的功能。
dispatch_suspend !=立即停止队列的运行,不能保证可以立即停止队列上正在运行的block。
e) dispatch_apply --- 在一个队列(串行或并行)上“运行”多次block
dispatch_apply确实会“等待”其所有的循环运行完毕才往下执行,会将主线程阻塞。
GCD 通过用dispatch barriers创建一个读者写者锁提供了一个优雅的解决方案。
f) dispatch_barrier_async && dispatch_barrier_sync
向某个队列插入一个block,当目前正在执行的block运行完成后,阻塞这个block后面添加的block,只运行这个block直到完成,然后再继续后续的任务。
dispatchbarrier (a)sync只在自己创建的并发队列上有效,在全局(Global)并发队列、串行队列上,效果跟dispatch_(a)sync效果一样。
h) dispatch_set_context与dispatch_set_finalizer_f的配合使用 --- 为队列添加上下文数据。
因为GCD是C语言接口形式,所以要用malloc/new/OC对象(__bridge关键字)创建。
同时,要用free/delete/CFRelease释放内存。
2. 引文:
(1)Grand Central Dispatch 基础教程:Part 1 --- 连续&并发,同步&异步,并发&并行,队列等基础知识,特别适合入门和对知识体系的梳理。
(2)iOS开发进阶/唐巧 --- GCD的便利性 和 GCD方法的简单使用。
(3)多线程编程 - GCD --- 细节介绍的很到位,实例也很贴切。
(4)GCD使用经验与技巧浅谈 --- GCD使用中的注意事项 和 一些 “坑”。
==================================================