如何计算一个过程在目标c中所用的时间?

时间:2010-10-18 12:34:12

标签: objective-c timer

嘿那里,我对iPhone开发和目标C很新鲜。对不起,如果这个问题太愚蠢....

这是我的问题,我想计算一下我的功能所花费的时间。喜欢UIGetScreenImage。这是代码:

-(void)screenCapture{
   CGImageRef screen = UIGetScreenImage();
   UIImage* image = [UIImage imageWithCGImage:screen];
   CGImageRelease(screen);
   UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}

我该怎么做来计算这个过程所花费的时间?示例代码将不胜感激。

感谢您的帮助。期待您的回复和想法。 :d

2 个答案:

答案 0 :(得分:4)

您可以获取方法开始和结束的当前日期,并检查这两个时刻之间的时间:

- (无效)抓屏{        NSDate * startDate = [NSDate date];        ...        NSDate * finishDate = [NSDate date];        NSLog(@“%f”,[finishDate timeIntervalSinceDate:startDate]);     }

编辑:我认为我上面描述的方法(温和地说)并不是衡量流程时间的最佳解决方案。现在我使用“Big Nerd Ranch”博客here中描述的使用mach_absolute_time函数的方法。我从帖子中复制了代码以说明该方法 - 使用此代码片段可以测量任意块的擦除时间:

#import <mach/mach_time.h>  // for mach_absolute_time() and friends

CGFloat BNRTimeBlock (void (^block)(void)) {
    mach_timebase_info_data_t info;
    if (mach_timebase_info(&info) != KERN_SUCCESS) return -1.0;

    uint64_t start = mach_absolute_time ();
    block ();
    uint64_t end = mach_absolute_time ();
    uint64_t elapsed = end - start;

    uint64_t nanos = elapsed * info.numer / info.denom;
    return (CGFloat)nanos / NSEC_PER_SEC;

} // BNRTimeBlock

答案 1 :(得分:1)

我认为可以找到更简单(更简单)的解决方案here

NSDate *methodStart = [NSDate date];

/* ... Do whatever you need to do ... */

NSDate *methodFinish = [NSDate date];
NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart];