Kernel ticking time statistics are the most accurate. Please refer to Quick Performance Measurements for details

#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 / NSEC_PER_SEC;
}
    
- (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));
}
Copy the code