GCD 的一些其他方法
GCD 栅栏方法: dispatch_barrier_async
dispatch_barrier_async 起到的是一个栅栏的作用,它等待所有位 于dispatch_barrier_async 函数之前的操作执行完毕之后才执行,在dispatch_barrier_async 函数执行完毕之后,dispatch_barrier_async 之后的操作才会得到执行。dispatch_barrier_async 函数同 dispatch_queue_create 函数的并发队列配合使用。
GCD 延时执行方法: dispatch_after
dispatch_after 是用来延迟执行的GCD方法,这个函数并不是在指定时间后执行处理,而是在指定的时间将处理追加到 dispatch_queue。
1 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ |
GCD 只执行一次:dispatch_once
在创建单例或者有整个程序运行过程中只执行一次的代码时,就需要使用 GCD 的 dispatch_once 函数。dispatch_once 保证在程序运行过程中,代码只被执行一次,即使是在多线程的环境下,也可以保证线程安全。
1 | -(void)once{ |
单例的创建:
1 | +(instancetype)sharedInstance{ |
GCD 快速迭代:dispatch_apply
dispatch_apply 函数按照指定的次数将指定的 block 追加到指定的 dispatch_queue 中,并且等待全部的处理执行结束。
1 | dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0); |
由于是在 Global Dispatch Queue 中执行,所以各个处理的执行时间不定,但是 done 一定会在最后的位置输出,因为 dispatch_apply 函数会等待所有的处理结束。