2012-09-22 35 views
2

我不希望设置一个“火”(和做一些事情)了一定的时间后已经过去了一个计时器。如何计算iOS中的时间?

因此,我不感兴趣的NSTimer类及其方法。

我所感兴趣的是计算经过的时间,而,例如,一些while循环正在执行。我可以用NSDate如下我想:

NSDate currentDate = [[NSDate alloc] init]; 

while(someConditionIsTrue) 
{ 
    // executing.. 
} 

timeElapsed = [self timeIntervalSinceDate:currentDate]; 

NSLog(@"time elapsed was: %i", timeElapsed); 

不过,如果我理解正确的话,timeIntervalSinceDate:只能算秒。

有没有一种方法可以算出在毫秒内经过的时间

换句话说,什么是我可以指望通过时间以及如何最小单位?

+1

如果你正在寻找一个简单的方法来计时代码,http://eng.pulse.me/line-by-line-speed-analysis-for -ios-apps /可能是你想要的。 –

+1

它的秒数,但它是浮点数,所以你有效地得到毫秒。在你的格式字符串中使用'%f'。 – Rob

+1

这是一个好一点做'[NSDate的timeIntervalSinceDate]'两次,完成后,再减去从第二个第一值开始,一次一次的时候。不会不必要地创建一个NSDate对象。 –

回答

6

你的第二个方法是正确的。将当前日期保存在一个NSDate对象中,并使用timeIntervalSinceDate:来获取此后的传递时间。结果将是类型NSTimeInterval这是一个浮点数。它以秒为单位指定时间差,但由于它是浮点数,它也可以存储几分之一秒。

NSTimeInterval总是以秒为单位指定;它在10,000年的范围内产生 亚毫秒精度。

+0

我没有意识到它会返回一个浮点数。谢谢! –

8

CFAbsoluteTimeGetCurrent()

CFAbsoluteTime before = CFAbsoluteTimeGetCurrent(); 
CFAbsoluteTime after = CFAbsoluteTimeGetCurrent(); 
+0

尽管'NSDate'也可以工作,这似乎更简单 – nielsbot

+1

实际上,'[NSDate timeIntervalSinceReferenceDate]'可能直接映射到CFAbsoluteTimeGetCurrent,因为它们返回相同的值。 –