概念:
GCD 提供serial FIFO queues让API调用者提交代码模块。这些被提交到队列的代码模块被系统管理的线程池调用并执行。并不保证你提交的代码会执行在哪个线程。但是FIFO queues会保证你提交的代码在某个时间被执行。
当多个队列有很多提交的代码块要处理的时候,系统会免费的为你创建额外的线程去并发的执行这些提交。当队列里面没有要执行的代码块,这些线程会自动被销毁。
GCD 提供的线程池处理这些队列并执行提交到队列的任务。从概念上讲,每个队列有自己的线程执行,不同的队列之前是异步的。
队列引用着dispatch_retain() 和 dispatch_release(),一旦队列管理block里的任务执行完成。所有引用将要被队列释放,然后系统就销毁这个队列。
dispatch_async :交一个异步的block到队列中,然后返回不用等待block执行完成。目标队列决定着这些block是串行还是并行执行在同一个队列中。不同的队列之间是并行的。
dispatch_sync :提交一个同步的block任务到一个队列,这个block会完成后再返回,所以会阻塞当前线程。所以这个方法在当前的队列可能造成死锁。作为一个优化这个方法提交的block在当前线程中执行。
图形抽象:
demo:
https://juejin.im/post/5a90de68f265da4e9b592b40 里面有很多例子,为了省事找了一个demo比较多的,主要看看效果即可,内容没看。
注意:Parse 官方的SDK开源了,里面很多GCD 的用法可以参考。
参考链接:
https://mp.weixin.qq.com/s?__biz=MzAxNDAzMzk0MQ==&mid=203702345&idx=1&sn=226f6f784d37b89718f6949c9214e1e6&scene=1&srcid=kl2ZmcSfYHuB6bMvYPEq#rd
https://developer.apple.com/documentation/dispatch?language=objc