今天测试程序性能时设计到了精密的时间计算,我了解了下,大概有三种写法
- NSDate
NSTimeInterval dateTime = [NSDate timeIntervalSinceReferenceDate];
NSDate,大家再熟悉不过了,这个类方法是获取从2001年1月1日 00:00开始的秒数。
- QuartzCore
CFTimeInterval currentTime = CACurrentMediaTime();
CACurrentMediaTime()方法是QuartzCore框架里的,相对来说比较原子量,比较精确,可以用来测量程序的时间效率。获取到的时间是手机开机后的秒数,在模拟器上运行数值不必计较,算时间差就好。
- CoreFoundation
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