A quick and easy way to measure the performance of a piece of iOS code is to dig down below all the Cocoa Touch stuff and use the low-level mach_absolute_time
. This call returns a tick count that can be converted into nanoseconds using information obtained from the mach_timebase_info
call. The following code sketches out the technique:
#import <mach/mach_time.h> // for mach_absolute_time double MachTimeToSecs(uint64_t time) { mach_timebase_info_data_t timebase; mach_timebase_info(&timebase); return (double)time * (double)timebase.numer / (double)timebase.denom / 1e9; } - (void)profileDoSomething { uint64_t begin = mach_absolute_time(); [self doSomething]; uint64_t end = mach_absolute_time(); NSLog(@"Time taken to doSomething %g s", MachTimeToSecs(end - begin)); }
The timebase values on the simulator, at least on my MacBook Air, are 1/1, however on the iPad and iPhone 4 they are 125/3; so don’t be lazy and hard code them.
Never assume that because something runs quickly on the simulator it will also run quickly on a target device. On two jobs last year I encountered code that took 100x longer to run an iPad than in the simulator.
Reference
Apple Technical Q&A QA1398
Pingback: 检测一段iOS代码的执行效率函数 | 大专栏