您现在的位置是:首页 > 文章详情

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

日期:2017-05-27点击:520

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

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高级

本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4859761.html,如需转载请自行联系原作者
原文链接:https://yq.aliyun.com/articles/366475
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章