2010-10-18 81 views
1

嘿,那里,我很新鲜到iPhone开发和客观C.对不起,如果这个问题太愚蠢....如何计算一个进程在目标c中所花费的时间?

这是我的问题,我想计算一个我的功能所需要的时间。像UIGetScreenImage。这里是代码:

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

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

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

回答

4

可以在方法开始获取当前的日期和完成,并检查这些2个时刻之间经过的时间:

- (无效)抓屏{ 的NSDate *的startDate = [NSDate的日期]; ... 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 
+0

你好,感谢您的及时回复。这里的另一个问题是在哪里查找关于持续时间的日志信息?通过Mac的控制台?或者别的地方?再次感谢您的帮助:D – Nihao 2010-10-18 12:45:30

+0

如果您在调试模式下运行应用程序,则日志消息将位于调试器控制台(cmd + shift + R快捷方式)上。否则我想你可以通过组织器窗口在设备日志中查找输出,但在调试时使用日志更常见 – Vladimir 2010-10-18 12:51:53

+0

嘿弗拉基米尔,非常感谢你的亲切和详细的解释。这对我非常有帮助。祝你有个愉快的一天:D – Nihao 2010-10-18 12:55:12

1

我觉得更容易(更简单的)解决方案,可以发现here

NSDate *methodStart = [NSDate date]; 

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

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