在iOS中将马赫数绝对时间转换为(纳秒)(目标C)

在iOS中将马赫数绝对时间转换为(纳秒)(目标C),ios,objective-c,iphone,time,mach,Ios,Objective C,Iphone,Time,Mach,我试图在iOS中编写一个helper方法,允许我使用mach\u absolute\u time()。以下是我的尝试: #include <mach/mach_time.h> - (double) convertMachAbsoluteTimeIntoSeconds:(uint64_t) mach_time { mach_timebase_info_data_t _clock_timebase; double nanos = (mach_time * _clock_

我试图在iOS中编写一个helper方法,允许我使用
mach\u absolute\u 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 / 10e9;
}

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

mach_timebase_info_data_t _clock_timebase;
mach_timebase_info(&_clock_timebase); // Initialize timebase_info
...
您可能会发现使用
AbsoluteToNanoseconds
更方便。有关完整示例,请参阅


请注意,如果愿意,您可以一次性初始化它。(如果它不稳定,用现有的API检查它时就不可能避免竞争条件,这是一件好事……)

啊,非常感谢!我将研究使用
AbsoluteToNanoseconds
to刚才看到
AbsoluteToNanoseconds
被弃用了!我知道马赫绝对时间,并经常使用它来测量绝对时间差,用于性能/定时测量。但是-如何转换为NSDate?由于某种原因,我找不到答案。@Mottishne或mach_time测量系统唤醒时发生的滴答声的数量。这与NSDate并不特别兼容,后者表示时间上的特定瞬间。这意味着两个调用MaqAbExpTyTyt之间的差异不能直接转换为NSTEMETH间隔(这是NSDATE的基础)。如何转换这些值取决于您实际要测量的内容。我从内核(EndpointSecurity framework)接收到一系列事件,这些事件的时间戳为马赫绝对时间(另一个马赫绝对时间作为回答这些事件的截止时间)。我想以某种方式转换为事件的“挂钟时间”…FWIW,返回
mach\u absolute\u time()
转换为秒。仅供参考,以后,不要编辑你的问题来包含答案,请随意。可以,Rob。我看到你发现了我的新保姆!为了完整起见,将其标记为“Objective-C”。有趣的问题!
mach_timebase_info_data_t _clock_timebase;
mach_timebase_info(&_clock_timebase); // Initialize timebase_info
...