zoukankan      html  css  js  c++  java
  • iOS---GCD的三种常见用法

    1.一次性代码:dispatch_once

    有时候,有些代码在程序中只要被执行一次。

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

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        static dispatch_once_t onceToken ;
        dispatch_once(&onceToken, ^{
            NSLog(@"代码只执行一次");
        });
    }

     2.延时执行

      延时执行通常有两种方法:

      (1)普通用法

       [self performSelector:@selector(run) withObject:nil afterDelay:2.0];

     (2)GCD用法

        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            //两秒后执行的代码
            NSLog(@"ahah");
        });

    如果队列是主队列,就在主队列中执行。如果队列是并发队列,就会开启新的线程。

        //全局并发队列
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), queue, ^{
            //两秒后执行的代码
            NSLog(@"ahah");
        });

    2017-06-17 10:32:09.483 GCDTest[15536:2440067] 代码只执行一次

    2017-06-17 10:32:11.683 GCDTest[15536:2440162] ahah --- <NSThread: 0x608000063300>{number = 3, name = (null)}

    3.队列组

    创建一个队列组—>

    开启多个任务(将所有任务放到队列组里面,同时执行)—>

    等队列组里面的所有任务都执行完成,再回到主线程执行其他操作

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        //1.创建一个队列组
        dispatch_group_t group = dispatch_group_create();
        
        //全局并发队列
        dispatch_queue_t global_queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        
        //开启一个任务,放到队列组中,异步执行
        dispatch_group_async(group, global_queue, ^{
            
            NSLog(@"小红吃饭------%@",[NSThread currentThread]);
            
        });
        
        //再开启一个任务
        dispatch_group_async(group, global_queue, ^{
            NSLog(@"小明吃饭------%@",[NSThread currentThread]);
        });
        
        //两个任务执行完,再执行这个
        dispatch_group_notify(group, dispatch_get_main_queue(), ^{
            NSLog(@"吃完一起回家------%@",[NSThread currentThread]);
        });
        
    }
  • 相关阅读:
    技术问答集录(二)(RPC和MVC框架&syn,lock区别)
    Zookeeper同一台机器集群部署
    Linux——JDK安装
    VirtualBox CentOs7 设置ssh连接

    ThreadLocal
    关于Centos 7上面的防火墙配置
    windows下使用命令行关闭进程
    强类型 弱类型语言 静态 动态语言
    无法启动此程序 ,因为计算机中丢失MSVCP120.dll
  • 原文地址:https://www.cnblogs.com/huadeng/p/7039627.html
Copyright © 2011-2022 走看看