阐述

去年在与大厂的交手中,碰到了如何测量函数耗时这类的问题。最近正好有点空余时间供我研究并整理它们,希望这次整理出的东西能给大家带来一点帮助。

探讨

测量函数耗时所用的方法有很多种,这次我们先来介绍 mach_absolute_time() 相关。

什么是Mach?

Mach是一个用于支持操作系统研究的操作系统内核,后来被开发成UNIX中BSD的替代内核。

Mach名称野史:  (引自百度百科)

据Tevanian说,MACH,源于一个读音错误。当时他正和其他人在匹兹堡一个下雨天里一边躲避着路上的泥水坑,一边讨论着新内核的事,Tevanian开玩笑地建议他们的新微核命名为MUCK,意为“多用户通信内核”(Multi-User Communication Kernel)或“多通用通讯核心”(Multiprocessor Universal Communication Kernel)。而一个意大利同事错将MUCK发错音为MACH后,拉希德觉的不错并采用了MACH。

两个问题

Number 1 如何获取当前系统的Mach绝对时刻

mach_absolute_time()

返回一个基于系统启动后的时钟嘀嗒数,是一个CPU/总线依赖函数。在macOS上可以确保它的行为,并且它包含系统时钟所拥有的全部时间区域,精度达到纳秒级。

(注: 时钟嘀嗒数在每次手机重启后,都会重新开始计数,而且iPhone锁屏进入休眠之后,tick也会暂停计数)

Number 2 如何将嘀嗒数转换为有意义数字 (正常时间)

mach_timebase_info()

函数用于获取当前系统时钟嘀嗒数转换信息。(主要是获取当前设备的转换分子和分母)

mach_timebase_info_data_t  转换信息

系统时钟嘀嗒数转换信息的关系如下:

时间(ns) / 系统嘀嗒数 = 转换系数分子(.numer) / 转换系数分母(.denom)

故:

时间(ns)  = 系统嘀嗒数 * 转换系数分子(.numer) / 转换系数分母(.denom)

mach_absolute_time 延伸

1 CACurrentMediaTime() 函数

CACurrentMediaTime()函数底层是mach_absolute_time(), 只是最后将结果转换为秒

2 mach_continuous_time() 函数

我们知道mach_absolute_time()在系统锁屏的时候是处于暂停状态,如果我们想统计包含锁屏时间,那么该如何处理呢?

答案是 iOS 10 以后,官方为我们提供的mach_continuous_time()函数,供我们使用。

引用:

1 https://www.cnblogs.com/zpsoe/p/6994811.html

2 https://baike.baidu.com/item/MACH/216388#2

3 https://blog.csdn.net/bravegogo/article/details/53188339

4 http://www.cocoachina.com/ios/20161216/18361.html

iOS 探讨之 mach_absolute_time相关推荐

  1. iOS 探讨之 设置文件iCloud不同步

    阐述 从业务层次来说,每个人都希望给用户提供更快更好的产品.由此,研发过程中会涉及到缓存这一技术.对于客户端研发来说,缓存写入沙盒后需要考虑的不简单是CRUD,还应包括缓存的安全性,这一点在用户信息上 ...

  2. iOS 探讨之 CADisplayLink

    概述 "金九银十",九月底我选择离开待了四年的公司.在与一些大厂的"交手"中,发现自己的确忽略了很多点. 从这个月开始,逐步的把那些点一一补充完整.Let's ...

  3. 帮派红包 概率_电子游戏如何教我关于连锁帮派

    帮派红包 概率 When I first played Warframe, I never expected to learn anything, much less about chain gang ...

  4. iOS 播放gif动态图的方式探讨

    原文链接:http://my.oschina.net/u/2340880/blog/608560 摘要 iOS中没有现成的接口来展示gif动态图,但可以通过其他的方式来处理gif图的展示. iOS中播 ...

  5. 探讨IOS应用在中国的盈利模式

    写在正文前:这个命题是面试的时候,面试官Roger给我的题目.昨天将结果发过去后,就没有消息了,估计这事黄了.好久没有写东西,回想这一年,淡淡的忧伤,当初预想的事情很多都没有做.这是开头的一篇,督促自 ...

  6. [转]iOS设备唯一标识探讨

    转自:http://www.jianshu.com/p/b83b0240bd0e iOS设备唯一标识探讨 为了统计和检测应用的使用数据,几乎每家公司都有获取唯一标识的业务需求,在iOS5以前获取唯一标 ...

  7. iOS设备唯一标识符探讨

    iOS设备唯一标识符探讨 一.现有方案 1.UDID(Unique Device Identifier) 获取方法:[[UIDevice currentDevice] uniqueIdentfier] ...

  8. 对Android和iOS项目中的模块结构和类结构设计的探讨

    1. 现有的代码规范缺少探讨的部分 1.1 关于项目的代码结构 通常来说,一个项目由多个模块组成:一个模块由多个类组成:一个类由多个方法组成:一个方法由多条语句组成: 按照代码粒度从大到小,可以划分为 ...

  9. 关于IOS delegate的weak和assign 探讨

    在使用IOS的别人写的SDK时,发现定义的delegate都是assign修饰的,相信很多人也会和我一样刚开始表示很不解. 1.delegate为什么用weak来修饰? delegate 之所以用we ...

最新文章

  1. TensorFlow 版本 1.10.0 发布
  2. 数据流模式、转换、格式与操作
  3. Django--ORM操作
  4. 卷积神经网络之 - Alexnet
  5. Matlab之rand(), randn(), randi()函数的使用方法
  6. ffmpeg 调整相片大小,如何使用ffmpeg的sws_scale()调整图片大小?
  7. 平板的android版本是5.0.2,EMUI5.0荣耀平板2升级固件下载
  8. TLS/SSl 相关攻击漏洞及检测方法(testssl.sh)
  9. Linux部署安装JDK
  10. iOS-推送通知详解
  11. 101.对称二叉树(力扣leetcode) 博主可答疑该问题
  12. 代理ip,代理服务器等相关
  13. 单肩包属于什么类目_包包属于什么商标类目
  14. 终于有人把前端鉴权讲明白了
  15. python怎么启动mne_mne-python 安装大法
  16. K210应用2-使用GPIO控制LED状态
  17. 计算机国培培训总结,国培培训总结范文(精选5篇)
  18. python实现一元线性回归预测电影票房收入
  19. vivado 基于cordic IP核的波形发生器
  20. 移动端跨平台开发Flutter 与 React Native对比

热门文章

  1. 阿拉德之怒获取服务器配置文件失败,阿拉德之怒为什么安装失败?阿拉德之怒安装失败解决方案...
  2. 2023年谷歌外链代发指南
  3. 大厂HR:我让你测试一个(电梯、杯子、笔、桌子、洗衣机),你会怎么测试它?
  4. 资本寒冬?看看2015年天使投资人投过的那些项目
  5. C语言-己有变量定义和西数调用语句,输入字符型a ,整型n 利用函数调用语句mypow(a,n);用来求a的n次方
  6. 带你走进开源阿卡信-v1.0
  7. centos7无法读取移动硬盘
  8. linux下Git代理设置
  9. will not be exported or published. Runtime ClassNotFoundExceptions may result.
  10. 小程序 zoom_Zoom是否真正监视您在通话中使用的应用程序?