gpt4 book ai didi

ios - (什么时候)CACurrentMediaTime/mach_system_time 在 iOS 上环绕?

转载 作者:行者123 更新时间:2023-11-29 11:42:45 28 4
gpt4 key购买 nike

要在 iOS 上获得准确的时间测量值,应使用 mach_absolute_time()。或 CACurrentMediaTime(),它基于 mach_absolute_time()。这记录在 this Apple Q&A 中,并在多个 StackOverflow 答案中进行了解释(例如 https://stackoverflow.com/a/17986909https://stackoverflow.com/a/30363702 )。

mach_absolute_time() 返回的值什么时候回绕? CACurrentMediaTime() 返回的值何时回绕?这会发生在任何现实的时间跨度内吗? mach_absolute_time() 的返回值是 uint64 类型,但我不确定它如何映射到实际时间跨度。

最佳答案

您引用的文档指出 mach_absolute_time 依赖于 CPU,因此我们不能说它回绕之前必须经过多少时间。在模拟器上,mach_absolute_time 为纳秒,因此如果它在 UInt64.max 处回绕,则转换为 585 年。在我的 iPhone 7+ 上,它是每秒 24,000,000 mac_absolute_time,也就是 24,000 年。底线是,mach_absolute_time 捕获的理论最大时间量会因 CPU 的不同而有所不同,但在任何实际应用中都不会遇到这种情况。

就其值(value)而言,与您发现的各种帖子一致,CFAbsoluteTimeGetCurrent documentation警告:

Repeated calls to this function do not guarantee monotonically increasing results. The system time may decrease due to synchronization with external time references or due to an explicit user change of the clock.

因此,如果您想要准确的耗时,您绝对不想使用 NSDate/DateCFAbsoluteTimeGetCurrent。两者都不能确保值单调递增。

简而言之,当我需要那种行为时,我通常使用 CACurrentMediaTime ,因为它享有 mach_absolute_time 的好处,但它为我将其转换为秒,这使得它使用起来非常简单。它和 mach_absolute_time 都不会在任何实际时间段内循环。

关于ios - (什么时候)CACurrentMediaTime/mach_system_time 在 iOS 上环绕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45551087/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com