You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何获取微秒级当前时间?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

火山引擎 最新活动