iOS-GCD使用详解及实例解析

2020-01-18 17:17:18王旭

 打印结果:

1 2 3 4 5   ---start---   任务1---{number = 1, name = main}   任务2---{number = 1, name = main}   任务3---{number = 1, name = main}   ---end---

解释

    这里的执行原理和步骤图跟“同步执行+并发队列”是一样的,只要是同步执行就没法开启新的线程,所以多个任务之间也一样只能按顺序来执行,

    (五)异步执行+主队列

    实现代码:

    
    - (void)asyncMain{
      //获取主队列
      dispatch_queue_t queue = dispatch_get_main_queue();
     
      NSLog(@"---start---");
      //使用异步函数封装三个任务
      dispatch_async(queue, ^{
        NSLog(@"任务1---%@", [NSThread currentThread]);
      });
      dispatch_async(queue, ^{
        NSLog(@"任务2---%@", [NSThread currentThread]);
      });
      dispatch_async(queue, ^{
        NSLog(@"任务3---%@", [NSThread currentThread]);
      });
      NSLog(@"---end---");
    }

     打印结果:

    1 2 3 4 5   ---start---   ---end---   任务1---{number = 1, name = main}   任务2---{number = 1, name = main}   任务3---{number = 1, name = main}

     解释

      异步执行意味着

        可以开启新的线程

        任务可以先绕过不执行,回头再来执行

        主队列跟串行队列的区别

          队列中的任务一样要按顺序执行

          主队列中的任务必须在主线程中执行,不允许在子线程中执行

          以上条件组合后得出结果: