如何获取微秒级当前时间?iOS中CACurrentMediaTime返回值及计时起点疑问
嘿,这个问题我刚好研究过,给你拆解清楚哈~
关于iOS的
CACurrentMediaTime和React Native的global.nativePerformanceNow详解 一、iOS平台的CACurrentMediaTime
- 返回值含义:它返回的是从设备启动后,扣除系统休眠时长的总秒数,精度可以达到纳秒级别(比如返回值可能是
12345.678901234,整数部分是秒,小数部分是纳秒转成的秒数)。 - 时间起点:以设备完成开机、进入系统的瞬间为起点,但会自动减去设备进入深度休眠的总时长——也就是说,设备休眠的时候这个时间不会继续走,唤醒后从休眠前的时间点继续累加。
- 适用场景:因为它完全不依赖系统的本地时间(用户手动修改系统时间不会影响它),非常适合做性能计时、动画帧间隔计算这类需要精准时间差的场景。
- 原生代码示例:
#include <CoreMedia/CoreMedia.h> // 获取当前时间(纳秒精度) double currentMediaTime = CACurrentMediaTime();
二、React Native的global.nativePerformanceNow
- 底层实现:这个函数在iOS端就是直接基于
CACurrentMediaTime封装的,完全继承了它的高精度特性。 - 返回值含义:返回的是从你的React Native应用启动完成后经过的毫秒数,精度可以到微秒级(比如返回
1234.567,就是1234毫秒+567微秒)。 - 时间起点:以你的RN应用初始化完成、开始执行JS代码的时间点为起点,符合W3C的
Performance.now()标准,专门用于前端/React Native的性能监控、动画计时。 - RN代码示例:
// 获取当前应用启动后的高精度时间(微秒级) const currentRNTime = global.nativePerformanceNow();
几个关键注意点
- 这两个时间都不受系统本地时间修改影响,比
new Date()这类依赖系统时间的API靠谱得多,适合计算时间间隔(比如统计一段代码的执行耗时)。 CACurrentMediaTime的时间是全局的(整个设备范围),而nativePerformanceNow是应用级的(只针对你的RN应用生命周期)。
内容的提问来源于stack exchange,提问作者chrmod




