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 = ;
NSLog(@"count=%d",count++);
};
//执行dispatch_once函数
//myblock调用
//myBlock();
//myBlock(); //只会执行一次,GCD once
static dispatch_once_t predicate;
dispatch_once(&predicate, myBlock);
dispatch_once(&predicate, myBlock);
//运行结果:虽然执行两次,只有一个输出
-- ::34.279 -GCD-once[:] count=
2、多次执行时:
//自定义一个block函数
//定义block
typedef void (^BLOCK)(size_t); //将函数封装到block
BLOCK myBlock = ^(size_t size){ static int count = ;
NSLog(@"count=%d",count++); };
//执行dispatch_apply
//GCD多次执行任务
dispatch_apply(, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), myBlock);
//运行结果如下:执行了5次,有5个输出
-- ::59.438 -GCD-apply[:] count=
-- ::59.438 -GCD-apply[:] count=
-- ::59.438 -GCD-apply[:] count=
-- ::59.438 -GCD-apply[:] count=
-- ::59.439 -GCD-apply[:] count=
iOS:GCD技术——仅仅执行一次和执行多次 dispatch_once和dispatch_apply的更多相关文章
- ios高级开发之多线程(三)GCD技术
GCD是基于C的API,它是libdispatch的的市场名称.而libdispatch作为Apple公司的一个库,为并发代码在多核硬件(跑IOS或者OS X)上执行提供有力支持. 那么我们为什么要用 ...
- iOS多线程技术方案
iOS多线程技术方案 目录 一.多线程简介 1.多线程的由来 2.耗时操作的模拟试验 3.进程和线程 4.多线程的概念及原理 5.多线程的优缺点和一个Tip 6.主线程 7.技术方案 二.Pthrea ...
- iOS多线程技术
iOS多线程技术主要分配NSThread.NSOperation和GCD.下边来简单的介绍一下吧. 随性一点,就不按照顺序来了.所以先介绍一下NSOperation. ---------------- ...
- 了解iOS消息推送一文就够:史上最全iOS Push技术详解
本文作者:陈裕发, 腾讯系统测试工程师,由腾讯WeTest整理发表. 1.引言 开发iOS系统中的Push推送,通常有以下3种情况: 1)在线Push:比如QQ.微信等IM界面处于前台时,聊天消息和指 ...
- iOS 开发技术栈与进阶
最近有一些开发朋友问我应该怎样提升自己的能力,回想起来做了这么久 iOS 开发,我也有过那种“让我做一个功能实现个需求我会做,但接下来怎样提高我不知道.”的时期,这里尝试列一下 iOS 开发的相关技术 ...
- iOS GCD 编程小结
一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的 ...
- 【腾讯Bugly干货分享】iOS黑客技术大揭秘
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5791da152168f2690e72daa4 “8小时内拼工作,8小时外拼成长 ...
- IOS GCD
UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [btn setTitle:@&quo ...
- iOS GCD基础篇 - 同步、异步,并发、并行的理解
1.关于GCD - GCD全称是Grand Central Dispatch - GCD是苹果公司为多核的并行运算提出的解决方案 - GCD会自动利用更多的CPU内核(比如双核.四核) - GC ...
随机推荐
- mysql 服务器配置
Windows: 1.在bin目录下执行mysqld.exe --install-manual安装服务(删除命令是mysqld.exe --remove) 2.执行net start mysql启动服 ...
- POJ-1410
Intersection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12817 Accepted: 3343 Des ...
- Jmeter-----随机生成手机号后8位并去重,来进行注册手机号的压测
要求:对注册接口进行100000次压测,手机号已126开头,后面的8位数不限 前言:在进行测试中,我们需要对注册接口进行压测100000次,那么就要求手机号码每次填写的不一致,否则手机号使用一次后会出 ...
- JavaScript备忘录-闭包(2)
闭包的定义 闭包是指函数有自由独立的变量.换句话说,定义在闭包中的函数可以“记忆”它创建时候的环境. 闭包的浅显理解 function makeFunc() { var name = "Mo ...
- Java Control Statements
Java Control Statements Java For Loop public class ForExample1 { public static void main(String[] ar ...
- Ubuntu18.04 安装Chrome浏览器
一路copy paste就OK sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources. ...
- POJ 1655.Balancing Act-树的重心(DFS) 模板(vector存图)
Balancing Act Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17497 Accepted: 7398 De ...
- 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]
题目传送门 数字序列 题目描述 给定一个整数序列 a1,a2,⋅⋅⋅,an ,求出一个递增序列 b1<b2<⋅⋅⋅<bn ,使得序列 ai 和 bi 的各项之差的绝对 ...
- npp插件-NewFileBrowser:自定义模板
☞ 概述 NewFileBrowser用于定义文件的初始化文本.当我们创建一个jsp文件,或者spring bean的配置文件,或者maven的pom文件... 总有一些内容是固定的:把这些内容建立成 ...
- bash 中的变量可以这么用
举个例子: t.sh ====================== #!/bin/bash ./a.sh ./b.sh ======================= a.sh =========== ...