在 iOS (objective-C) 中将 mach_absolute_time 转换为(纳)秒

dav*_*lev 3 iphone time objective-c ios mach

我正在尝试在 iOS 中编写一个辅助方法,以允许我使用mach_absolute_time()秒(或纳秒),以便我可以找到传入设备传感器数据的时间导数。这是我的尝试:

#include <mach/mach_time.h>

- (double) convertMachAbsoluteTimeIntoSeconds:(uint64_t) mach_time {
    mach_timebase_info_data_t _clock_timebase;
    double nanos = (mach_time * _clock_timebase.numer) / _clock_timebase.denom;
    return nanos / 1e9;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码正在编译,但我收到的当前警告是“‘*’的右操作数是垃圾值”。另外,在任何情况下它都不会返回合理的结果:/

从我读到的来看,mach_absolute_time()有一些特质,所以我认为让这个工作可能对其他人有用。

慷慨地接受了所有帮助!

Rob*_*ier 5

您已经声明了_clock_timebase,但从未初始化它,因此它只是在堆栈上填充了垃圾值。你的意思是:

mach_timebase_info_data_t _clock_timebase;
mach_timebase_info(&_clock_timebase); // Initialize timebase_info
...
Run Code Online (Sandbox Code Playgroud)

您可能会发现使用它来AbsoluteToNanoseconds为您执行此操作更方便。有关完整示例,请参阅QA1398:马赫绝对时间单位

请注意,mach_timebase_info 承诺是稳定的,因此如果您愿意,您可以对其进行一次初始化。(如果它不稳定,那么在使用现有 API 检查它时就不可能避免竞争条件,所以这是好事......)