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

Eth*_*len 7 xcode cocoa-touch objective-c ios

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

self.itemsArray = [Helper changeTheA:self.itemsArray];
self.itemsArray = [Helper convertDates:self.itemsArray];
Run Code Online (Sandbox Code Playgroud)

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

我想做一些调整,但我需要能够测量,以便看看我是否比以前的代码做了改进.

Pau*_*l.s 6

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

NSDate *startDate = [NSDate date];

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

NSLog(@"changeTheA time taken: %f", -[startDate timeIntervalSinceNow]);
Run Code Online (Sandbox Code Playgroud)

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


大方注意

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


jus*_*tin 6

是.您可以使用仪器的采样器.

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

self.itemsArray = [Helper changeTheA:self.itemsArray];
self.itemsArray = [Helper convertDates:self.itemsArray];
Run Code Online (Sandbox Code Playgroud)

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