4月11日 GCD 总结(二)
一、指定一定数量的延迟之后,使用 GCD 来执行代码--使用 Dispatch_after 和 Dispatch_after_f 函数

1、 dispatch_after

在一段给定的、以纳秒为单位的时间段之后,将 Block Object 分派到一个分派队列。这

个函数需要的参数有:

Delay in nanoseconds

在执行指定的 Block Object(由第三个参数指定)之前 GCD 必须在一个给定的分派队列 (由第二个参数指定) 上等待的纳秒数。

Dispatch queue

Block Object (由第三个参数指定)在给定的延迟(由第一个参数指定)之后必须执行在其上执行的派送队列。

Block object

在指定的分派队列上等待一定纳秒后 Block Object 会被调用;它没有返回值并且不接受参数

int64_t delayInSeconds = 20.0;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

//

NSLog(@"oh fuck!");

});

像你看到的那样,对于 dispatch_after 和 dispatch_after_f 函数纳秒级延迟参数必须是类 dispatch_time_t,它是绝对时间的抽象表示形式。要得到这个参数的值,你要用此代码中演示的 dispatch_time 函数。这里是您可以传递给 dispatch_time 函数的参数:

Base time

假设这个值为 B,Delta parameter 值为 D,通过这个函数结束的时间就等于 B+D。您可以设置此参数的值到 DISPATCH_TIME_NOW 来把现在作为基时间,然后从现在使用 Delta 参数来确定 Delta。

Delta to add to base time

这个参数是要增加到计算时间参数来获取函数结果的纳秒。例如,表示一个从现在开始 3 秒的时间,你可以这样来写你的代码:

dispatch_time_t delay =
dispatch_time(DISPATCH_TIME_NOW, 3.0f * NSEC_PER_SEC); 或者表示从现在开始半秒的时间:
dispatch_time_t delay =
dispatch_time(DISPATCH_TIME_NOW, (1.0 / 2.0f) * NSEC_PER_SEC);

2、dispatch_after_f

分派一个 C 函数到 GCD 在限定的、以纳秒限定的时间之后执行,这个函数接受 4 个参数:

Delay in nanoseconds

在执行给定函数之前 (由第四个参数指定)GCD 必须在指定派送队列(由第二个参数指定) 上等待的纳秒数。

Dispatch queue

C 函数 (由第四个参数指定) 必须在给定延迟(由第一个参数指定)之后在其上执行分派送队列。

Context
一个值在堆中传递到了 C 函数的内存地址 (举例见 5.5)。
C 函数
在特定时间段(由第一个参数指定)之后必须执行的 C 函数在给定分派队列中(由第二个

参数指定)的地址。

{

double delayInSeconds = 2.0;

dispatch_time_t delayInNanoSeconds=dispatch_time(DISPATCH_TIME_NOW, delayInNanoSeconds*NSEC_PER_SEC);

dispatch_queue_t cur=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_after_f(delayInNanoSeconds, cur, NULL, processSomething);

}

void processSomething(void *paramContext)

{

/* Do your processing here */

NSLog(@"Processing...");

}

二、在 GCD 上一个任务最多执行一次--使用 dispatch_once 函数

函数 dispatch_once,它接受 2 个

参数:

Token
一个类 dispatch_once_t 的 Token 持有 GCD 是代码块第一次执行时生成的 Token。如果

你想最多一次执行一段代码,那么无论什么时候这个代码在 APP 中被调用你必须指定在这

个方法中指定同样的 Token。

Block Object

Block Object 最多执行一次。这个 Block Object 返回时没有值并且没有参数。 dispatch_once 总是被发出呼叫的代码用来在当前队列上执行任务,它可能是一个串行队列、一个并发队列或者一个主队列。

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

});

4月11日 GCD 总结(二)相关推荐

  1. 4月11日 GCD 总结(一)

    有 2 种向主队列分派任务的方法,两者都是异步的,即使在任务没有执行的时候也让你 的程序继续: dispatch_async function 在分派队列上执行一个 Block Object.  di ...

  2. 二年级课程表(3月7日-3月11日)

    二年级课程表(3月7日-3月11日) 时    间 周    一 周    二 周    三 周    四 周    五 9:00-9:25 语文(传统文化) 数学(速算巧算) 语文(古诗诵读) 数学 ...

  3. 二年级课程表(4月11日-4月15日)

    二年级课程表(4月11日-4月15日) 时间 周一 周二 周三 周四 周五 9:00-9:25 语文(说文解字) 数学(口诀求商) 语文(口语交际) 数学(应用除法) 语文(古诗诵读) 9:30-9: ...

  4. D2 日报 2019年6月11日

    ? 开源项目 ➡️ sfyc23/EverydayWechat watch 34 star 1690 fork 317 每日自动给女朋友发微信暖心话. github.com ➡️ YMFE/yapi ...

  5. 信号完整性与电源完整性分析_「1月11日 免费视频直播」高速PCB信号完整性和电源完整性仿真实战分析、ADS创新解决方案分享-送给工程师的一份新年礼物...

    尊敬的用户 万物互联场景的普遍应用,对于数据传输标准提出了更高的要求. 目前,多数数据传输标准,包括USB4.0.Thunderbolt3.0.以太网.HDMI2.1等,都可以支持一个通道内超过10G ...

  6. 互联网晚报 | 11月11日 星期四 | 腾讯第三季度营收1424亿元;华为捐赠百万价值职业技能券;货拉拉成立司机权益保障委员会...

    ‍ ‍今日看点 ✦ 第四届中国国际进口博览会闭幕,累计意向成交707.2亿美元 ✦ 腾讯Q3营收1424亿元,微信及WeChat合并月活跃账户数达12.626亿 ✦ 货拉拉成立司机权益保障委员会,创始 ...

  7. 四部门联合约谈蚂蚁集团有关人员;苹果11月11日再开发布会;树莓派 400 发布|极客头条

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 快扫描二维码来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早 ...

  8. 【历史上的今天】3 月 11 日:谷歌推出 Google Voice;互联网先驱诞生日;Foursquare 上线

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 3 月 11 日,在 1970 年的今天,"量子之父"潘建伟出生.2016 年 ...

  9. 分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月11日-6月17日)

    分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月11日-6月17日) 本周Silverlight学习资源更新 Silverlight 自定义tooltip _e ...

最新文章

  1. C++正则表达式的使用
  2. 大剑无锋之什么是值传递和引用传递?【面试推荐】
  3. 【VxWorks系列】任务间同步与通信之共享内存
  4. python基础(初识Python)
  5. c语言ip地址转16进制,点分十进制形式的ip地址转化为十六进制数
  6. python 常用快捷键
  7. android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
  8. 如何批量将 webp 格式的图片转换为 jpg 格式
  9. jwplayer html插件,Angular4使用经验之:jwplayer插件运用到angular4插件普适法
  10. Android UI开发神兵利器之设计资源
  11. 【Alpha版本】冲刺阶段——Day 1
  12. 微一案做php,微一案:真正的高效率,都是这么炼成的
  13. esxi设置群晖核显直通
  14. 【Pandas】根据某列分组求和
  15. Redis三主三从集群搭建(三台机器)
  16. 物联网之NB-IoT技术实践开发三
  17. Java游戏碟中谍,煮 Retrofit 论 RxJava(一)
  18. APP稀有资源及19种无需编程的App创建工具
  19. 剑指 Offer II 060. 出现频率最高的 k 个数字
  20. IEEE | DSConv: Efficient Convolution Operator

热门文章

  1. 目前最常用的计算机机箱类型为_绍兴承接离心风机箱高品质
  2. 10a大电流稳压芯片_一文教你秒懂LDO芯片电路设计的六大因素
  3. mysql业务 日志_mysql笔记之日志篇
  4. python使用xml布局界面_Python:使用ElementTree更新XML文件,同时尽可能地保留布局...
  5. 五边形lisp程序_CAD LISP 程序
  6. 从第一范式到第二范式所做的操作是_给女同事讲解MySQL数据库范式与反范式,她直夸我“技术好”
  7. Directed Roads CodeForces - 711D (基环外向树 )
  8. CString .Format
  9. 20155220吴思其 实验2 Windows口令破解
  10. MasterPage + UpdatePanel + FileUpload