如何测量Objective-C for iOS中两行代码之间的时间?

时间:2012-04-18 23:27:18

标签: ios objective-c xcode cocoa-touch

我有以下代码需要一段时间来处理:

self.itemsArray = [Helper changeTheA:self.itemsArray];
self.itemsArray = [Helper convertDates:self.itemsArray];

有没有办法,在仪器或其他地方,我可以衡量从第一行代码到第二行代码的时间......以滴答或毫秒或其他什么方式?

我想做一些调整,但我需要能够进行测量,以便了解我是否对之前的代码进行了改进。

3 个答案:

答案 0 :(得分:6)

最快,最脏,可能不是很精确的方式

NSDate *startDate = [NSDate date];

self.itemsArray = [Helper changeTheA:self.itemsArray];

NSLog(@"changeTheA time taken: %f", -[startDate timeIntervalSinceNow]);

一个稍微复杂但可能更有用的解决方案,如果你正在进行一些基本的分析,可以看here,它使用一个执行你提供的块的C函数。


大方注释

正如Justin指出创建NSDate的实际行为然后将其记录下来会对您的测量产生干扰,因此这种技术对于获得球场数据确实有任何好处,即使这样你也应该运行在时序块内进行大量代码迭代。如果您需要准确的测量,请跳到贾斯汀的答案

答案 1 :(得分:6)

是。你可以使用仪器的采样器。

运行应用程序,运行程序一段时间,然后在Instruments中找到包含以下内容的符号:

self.itemsArray = [Helper changeTheA:self.itemsArray];
self.itemsArray = [Helper convertDates:self.itemsArray];

它应该逐行显示权重。另请注意,仪器允许您指定采样频率,最低可达40微秒。

答案 2 :(得分:3)

我会使用以下代码:

NSTimeInterval start = CACurrentMediaTime();

// your code goes here

NSTimeInterval end = CACurrentMediaTime();
NSTimeInterval delta = end - start;
NSLog(@"Execution took %f seconds.", delta);

它比NSDate精确得多。