如何从上次启动获取NSTimeInterval值

时间:2011-05-09 13:30:27

标签: iphone ios nstimeinterval

我需要从上次设备启动时获取NSTimeInterval值。我发现CACurrentMediaTime()适合这个任务,但在我的应用程序中,我没有使用Core Animation,我不认为这是包含此框架的最佳方式,只是为了获得此功能。还有另外一种方法可以在上一次启动的时间内以更优雅的方式获得时间吗?

3 个答案:

答案 0 :(得分:17)

自上次系统重启以来的 NSTimeInterval 值可以通过以下Foundation对象和方法更直接地获取:

[[NSProcessInfo processInfo] systemUptime]

答案 1 :(得分:1)

最快的低级方法是使用mach_absolute_time()从处理器读取系统正常运行时间

#include <mach/mach_time.h>

int systemUptime()
{
    static float timebase_ratio;

    if (timebase_ratio == 0) {
       mach_timebase_info_data_t s_timebase_info;
       (void) mach_timebase_info(&s_timebase_info);

       timebase_ratio = (float)s_timebase_info.numer / s_timebase_info.denom;
    }

    return (int)(timebase_ratio * mach_absolute_time() / 1000000000);
}

请注意,处理器的timebase_ratio不同。例如,在macbook上它等于1,而在iPhone 5上它等于125/3(~40)。

答案 2 :(得分:-1)

尝试C系统调用,时间(3)应该返回正常运行时间。

在MacOSX上,正常运行时间也会返回。所以必须有一种方法。