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
  • 相关阅读:
    js关于页面坐标api
    js面向对象之创建对象
    Web前端安全问题
    js操作cookie
    css清除浮动
    块级格式化上下文(block formatting context)
    《python核心编程》笔记——系统限制
    《python核心编程》笔记——文件的创建、读取和显示
    黑客们的故事连载十二 “蠕虫来袭”:莫里斯
    黑客们的故事连载十一 下村努—虚拟战争追逐
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4859761.html
Copyright © 2011-2022 走看看