不推荐使用AbsoluteToNanoseconds(),Uptime()

时间:2017-11-07 23:08:09

标签: objective-c xcode macos

我试图用新版本替换Xcode中的一些已弃用的函数,尽管我似乎无法弄清楚如何使其正常工作:

AbsoluteTime startTime = UpTime();
float frameTime = UnsignedWideToUInt64(AbsoluteDeltaToNanoseconds(UpTime(),startTime))/1E9;

我在这句话中得到两个警告:

'UpTime' is deprecated: first deprecated in macOS 10.8
'AbsoluteDeltaToNanoseconds' is deprecated: first deprecated in macOS 10.8

我在这里看了各种其他线程,并尝试使用:

NSTimeInterval systemUptime = [[NSProcessInfo processInfo] systemUptime] / 1E9;

但它似乎没有返回相同的结果:

1: 0.011983 // deprecated function
2: 0.000431 // replacement function
1: 0.007218
2: 0.000431
1: 0.007084
2: 0.000431

我认为我需要做些什么来获得新功能的正确值?

1 个答案:

答案 0 :(得分:1)

[[NSProcessInfo processInfo] systemUptime]以秒为单位返回正常运行时间,而不是UpTime()的替代品。 mach_absolute_time()应该是UpTime()的简单替代品。

对于AbsoluteDeltaToNanoseconds(),您可以编写代码来计算时间戳之间的绝对差异,我相信mach_absolute_time()在macOS上已经是纳秒(但您应该验证这一点)。然后,只要在进行除法时正确地将值转换为(uint64_t),浮点结果中的精度应该相同。