GCD常用函数

  • 延迟执行
/*
第一个参数:DISPATCH_TIME_NOW 从现在开始计算时间
第二个参数:延迟的时间 2.0 * GCD时间单位:纳秒
第三个参数:队列
*/
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        
    });
  • 一次性代码
    //不能使用到懒加载
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        
    });
  • 栅栏函数
//栅栏函数不能使用全局并发队列
dispatch_barrier_async(dispatch_queue_create("download", DISPATCH_QUEUE_PRIORITY_DEFAULT), ^{
        
    });
  • 快速迭代
/*
第一个参数:遍历的次数
第二个参数:队列(并发队列)
第三个参数:索引
*/
dispatch_apply(10, dispatch_get_global_queue(0, 0), ^(size_t index) {
        
    });
  • 队列组
    //1.创建队列
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    
    //2.创建队列组
    dispatch_group_t group = dispatch_group_create();
    
    //3.异步函数
    dispatch_group_async(group, queue, ^{
        
    });
    dispatch_group_async(group, queue, ^{
        
    });
    
    //拦截通知,当队列组中所有的任务都执行完毕的时候会进入到下面的方法
    //本身是异步的
    dispatch_group_notify(group, queue, ^{
        
    });
    
    //等待,死等.直到队列组中所有的任务都执行完毕之后才能执行
    //本身是阻塞的
    dispatch_group_wait(group, DISPATCH_TIME_FOREVER);
  • 定时器
//1.创建GCD中的定时器
/*
第一个参数:DISPATCH_SOURCE_TYPE_TIMER 表示是定时器
第二个参数:描述信息,线程ID
第三个参数:更详细的描述信息
第四个参数:队列,决定GCD定时器中的任务在哪个线程中执行
*/
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_global_queue(0, 0));
//2.设置定时器(起始时间|间隔时间|精准度)
/*
第一个参数:定时器对象
第二个参数:起始时间
第三个参数:间隔时间
第四个参数:精准度 绝对精准0
*/
    dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 2.0 * NSEC_PER_SEC, 0 * NSEC_PER_SEC);
//3.设置定时器执行的任务
    dispatch_source_set_event_handler(timer, ^{
        
    });
//4.启动任务
    dispatch_resume(timer);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容