码迷,mamicode.com
首页 > 移动开发 > 详细

iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply

时间:2015-10-08 00:23:30      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:

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

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

 

iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply

标签:

原文地址:http://www.cnblogs.com/XYQ-208910/p/4859761.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!