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

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

    可以开启新的线程

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

    并行队列意味着

      任务之间不需要排队,且具有同时被执行的“权利”

      两者组合后的结果

        开了三个新线程

        函数在执行时,先打印了start和end,再回头执行这三个任务

        这三个任务是同时执行的,没有先后,所以打印结果是“任务3-->任务2-->任务1”

         步骤图

        iOS-GCD使用详解,iOS-GCD使用详解解析,iOS-GCD使用详解实例代码

        (二)异步执行 + 串行队列

        实现代码:

        
        //异步执行 + 串行队列
        - (void)asyncSerial{
          //创建一个串行队列
          dispatch_queue_t queue = dispatch_queue_create("标识符", DISPATCH_QUEUE_SERIAL);
         
          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 = 3, name = (null)} 任务2---{number = 3, name = (null)} 任务3---{number = 3, name = (null)}

         

        解释

          异步执行意味着

            可以开启新的线程

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

            串行队列意味着

              任务必须按添加进队列的顺序挨个执行

              两者组合后的结果

                开了一个新的子线程

                函数在执行时,先打印了start和end,再回头执行这三个任务

                这三个任务是按顺序执行的,所以打印结果是“任务1-->任务2-->任务3”