获得更准确的时间测量

hem*_*ker 1 time objective-c nsdatecomponents

目前,我正在使用以下小数分钟记录两个事件之间的时间:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *dateComponents =  [calendar components:unitFlags fromDate:date];

CGFloat hour = [dateComponents hour];
CGFloat minute = [dateComponents minute];
CGFloat second = [dateComponents second];

//set start time in decimal minutes
CGFloat startTime = ((hour*3600.0)+(minute*60.0)+(second))*.016666;

//do work...

//set end time in decimal minutes
CGFloat endTime = ((hour*3600.0)+(minute*60.0)+(second))*.016666;

//calculate time elapsed in decimal minutes
CGFloat totalTime = endTime-startTime;
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我只是在几秒钟内获得时间然后转换为小数分钟.因此,我得到的唯一值是0.016663(十进制分钟中的一秒),0.033325(十进制分钟中的两秒),0.049988(十进制分钟中的三秒)等等.我没有得到任何值.有什么方法可以让我得到更准确的时间吗?我检查,看看是否NSDateComponents有一个millisecond属性或诸如此类的东西,但我无法找到任何.

谢谢!

pro*_*rmr 6

你也可以使用CFAbsoluteTimeGetCurrent(),它返回一个双倍的包含时间,以秒为单位和几分之一秒:

CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
Run Code Online (Sandbox Code Playgroud)

然后,您可以计算以秒为单位的经过时间和几分之一秒:

elapsed = CFAbsoluteTimeGetCurrent() - startTime;

NSLog(@"Elapsed Time: %0.3f seconds", elapsed);
Run Code Online (Sandbox Code Playgroud)

我喜欢在我的app委托中使用调试代码(#ifdef DEBUG),并在我的第一个视图控制器中的viewDidAppear中报告已用的启动时间,以便在开发时能够密切关注它.