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);

你可能感兴趣的:(GCD常用函数)