今天測(cè)試程序性能時(shí)設(shè)計(jì)到了精密的時(shí)間計(jì)算,我了解了下,大概有三種寫(xiě)法
- NSDate
NSTimeInterval dateTime = [NSDate timeIntervalSinceReferenceDate];
NSDate,大家再熟悉不過(guò)了,這個(gè)類(lèi)方法是獲取從2001年1月1日 00:00開(kāi)始的秒數(shù)。
- QuartzCore
CFTimeInterval currentTime = CACurrentMediaTime();
CACurrentMediaTime()方法是QuartzCore框架里的,相對(duì)來(lái)說(shuō)比較原子量,比較精確,可以用來(lái)測(cè)量程序的時(shí)間效率。獲取到的時(shí)間是手機(jī)開(kāi)機(jī)后的秒數(shù),在模擬器上運(yùn)行數(shù)值不必計(jì)較,算時(shí)間差就好。
- CoreFoundation
CFAbsoluteTime absoluteTime = CFAbsoluteTimeGetCurrent();
CoreFoundation框架中的CACurrentMediaTime()方法,也是獲取2001年1月1日 00:00開(kāi)始的秒數(shù)。相當(dāng)于上面的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);
});
輸出結(jié)果
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