• 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(), ^{

                 

            });

     

  • 相关阅读:
    Centos7.6安装教程 && history设置显示执行命令的时间
    C# 调用第三方webapi 接口的示例(使用httpclient)
    asp.net core 上传文件
    Sql中CHARINDEX用法---判断数据库某个字段是否包含某个字符
    ASP.NET上传文件出现“404-找不到文件或目录”的解决办法
    C# 中转换的几种方式
    C# 向文件写入和读取文件内容
    C# 中正则表达式
    C# 写的通用得到富文本框中的图片路径
    C# 正则表达式输入验证必须为汉字
  • 原文地址:https://www.cnblogs.com/yangli-ios/p/4193558.html
Copyright © 2020-2023  润新知