zoukankan      html  css  js  c++  java
  • iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply

    只执行一次  (多用于单例模式)

    dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);

    dispatch_once_t *predicate:一个全局的变量      dispatch_block_t block:block函数块

    多次执行

    dispatch_apply(size_t iterations, dispatch_queue_t queue,void (^block)(size_t));

    size_t iterations:执行次数      dispatch_queue_t queue:队列      void (^block)(size_t):block函数块

    具体举例如下:

    1、只执行一次时:

    //自定义一个block函数块

    //定义block
    typedef void (^BLOCK)(void);
        
    //将执行代码封装到block中
    BLOCK myBlock = ^(){
        static int count = 0;
        NSLog(@"count=%d",count++);
    };

    //执行dispatch_once函数

    //myblock调用
    //myBlock();
    //myBlock();
            
    //只会执行一次,GCD once
    static dispatch_once_t predicate;
    dispatch_once(&predicate, myBlock);
    dispatch_once(&predicate, myBlock);

    //运行结果:虽然执行两次,只有一个输出

    2015-10-07 22:54:34.279 04-GCD-once[3501:278570] count=0

    2、多次执行时:

    //自定义一个block函数

    //定义block
    typedef void (^BLOCK)(size_t);
        
    //将函数封装到block
    BLOCK myBlock = ^(size_t size){
        
        static int count = 0;
        NSLog(@"count=%d",count++);
            
    };

    //执行dispatch_apply

    //GCD多次执行任务
    dispatch_apply(5, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), myBlock);

    //运行结果如下:执行了5次,有5个输出

    2015-10-07 22:57:59.438 05-GCD-apply[3528:280053] count=0
    2015-10-07 22:57:59.438 05-GCD-apply[3528:280093] count=2
    2015-10-07 22:57:59.438 05-GCD-apply[3528:280094] count=3
    2015-10-07 22:57:59.438 05-GCD-apply[3528:280095] count=1
    2015-10-07 22:57:59.439 05-GCD-apply[3528:280053] count=4
  • 相关阅读:
    node-log4js3.0.6配置
    MySQL命令学习
    64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)
    64位 windows10,安装配置MYSQL8.0.13
    vscode切换界面布局
    一个网站同时监听两个端口
    javascript +new Date()
    es6 解构
    react列表数据显示
    访问禁止,检测到可疑访问,事件编号
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4859761.html
Copyright © 2011-2022 走看看