NSDate 、CFAbsoluteTimeGetCurrent

2017-05-03  本文已影响185人  T_Yang

今天测试程序性能时设计到了精密的时间计算,我了解了下,大概有三种写法

  NSTimeInterval dateTime = [NSDate timeIntervalSinceReferenceDate];

NSDate,大家再熟悉不过了,这个类方法是获取从2001年1月1日 00:00开始的秒数。

CFTimeInterval currentTime = CACurrentMediaTime();

CACurrentMediaTime()方法是QuartzCore框架里的,相对来说比较原子量,比较精确,可以用来测量程序的时间效率。获取到的时间是手机开机后的秒数,在模拟器上运行数值不必计较,算时间差就好。

CFAbsoluteTime absoluteTime = CFAbsoluteTimeGetCurrent();

CoreFoundation框架中的CACurrentMediaTime()方法,也是获取2001年1月1日 00:00开始的秒数。相当于上面的NSDate方法,值是一样的。

附上程序代码片段

    NSTimeInterval dateTime = [NSDate timeIntervalSinceReferenceDate];
    CFTimeInterval currentTime = CACurrentMediaTime();
    CFAbsoluteTime absoluteTime = CFAbsoluteTimeGetCurrent();
    NSLog(@"%f---%f---%f", dateTime, currentTime, absoluteTime);
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        NSLog(@"%f---%f---%f", [NSDate timeIntervalSinceReferenceDate] - dateTime, CACurrentMediaTime() - currentTime, CFAbsoluteTimeGetCurrent() - absoluteTime);
    });

输出结果

2017-05-03 09:38:39.776 test[3757:342762] 515468319.776574---20629.395686---515468319.776596
2017-05-03 09:38:41.974 test[3757:342762] 2.197655---2.197604---2.197633
上一篇 下一篇

猜你喜欢

热点阅读