zoukankan      html  css  js  c++  java
  • ios多线程开发 GCD常见用法

    1-延迟执行

     可以安排其线程(1),主队列

             dispatch_queue_t queue= dispatch_get_main_queue();

             dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), queue, ^{

                NSLog(@"主队列--延迟执行------%@",[NSThread currentThread]);

           });     

     可以安排其线程(2),并发队列

         1.获取全局并发队列

           dispatch_queue_t queue1= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

         2.计算任务执行的时间

           dispatch_time_t when=dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC));

         3.会在when这个时间点,执行queue中的这个任务

           dispatch_after(when, queue1, ^{

             NSLog(@"并发队列-延迟执行------%@",[NSThread currentThread]);

           });

     

    2.使用dispatch_once一次性代码

        使用dispatch_once函数能保证某段代码在程序运行过程中只被执行1

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

            // 只执行1次的代码(这里面默认是线程安全的)

        });

    整个程序运行过程中,只会执行一次。

     

    3.队列组

    使用队列组可以让任务1和任务2同时进行,且当两个任务都完成的时候回到主线程进行界面显示操作。

    //1.创建一个队列组

            dispatch_group_t group = dispatch_group_create();

     

    //2.开启一个任务

            dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  

            });

        

    //3.开启第二个任务

            dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{  

            });

    //同时执行任务1任务2操作

     

    //4.group中的所有任务都执行完毕, 再回到主线程执行其他操作

            dispatch_group_notify(group,dispatch_get_main_queue(), ^{

                 

            });

     

  • 相关阅读:
    全面提价2499元起小米6发布:四曲陶瓷机身+骁龙835+变焦双摄(小米在设计上也多次获得红点最佳、iF金奖等72项工业设计大奖)
    VCL的通用属性,方法和事件 good
    抗日名将粟裕
    部署 Redis 群集
    Xamarin
    NET Core控制反转(IoC)
    C#开发Linux守护进程
    数据一致性(consistency)、服务可用性(availability)、分区容错性(partition-tolerance)
    ssm框架
    javascript面向对象之闭包
  • 原文地址:https://www.cnblogs.com/yangli-ios/p/4193558.html
Copyright © 2011-2022 走看看