如何测量UITableViewCell的加载时间?

时间:2015-10-08 23:21:16

标签: ios objective-c uitableview

我优化了UITableView的滚动平滑度,但很难注意到眼睛的细微增益。我正在寻找一种直接的方式来打印出'#34;加载时间"每个UITableViewCell看起来如何。这可能吗?

3 个答案:

答案 0 :(得分:3)

  

但很难注意到细微的收获。

不要试试。使用仪器!这就是它的用途。当你滚动时,Core Animation乐器会告诉你FPS,这正是你想知道的。时间分析工具会告诉您代码中确切花费的时间。

不要猜。不要眼球。不要添加自己的计时仪器。使用仪器!

答案 1 :(得分:1)

你可以做两件事:

1:测量- tableView:cellForRowAtIndexPath:

的执行时间

2:测量- reloadData

的执行时间

测量

- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath {
   CFTimeInterval startTime = CACurrentMediaTime();

    //Do your thing - dequeue, setup your cell.
    CFTimeInterval endTime = CACurrentMediaTime();
    NSLog(@"Cell Creation: %g s", endTime - startTime);
    return cell;
}

以及在何处调用reloadData()

    CFTimeInterval startTime = CACurrentMediaTime();
    [self.tableView reloadData];
    CFTimeInterval endTime = CACurrentMediaTime();
    NSLog(@"Cell Creation: %g s", endTime - startTime);

答案 2 :(得分:1)

您可以使用马赫绝对时间获得最准确的结果。这里有一个很好的解释:https://developer.apple.com/library/mac/qa/qa1398/_index.html

示例代码:

uint64_t startTime = mach_absolute_time();

// do work here


uint64_t endTime = mach_absolute_time();
uint64_t elapsedTime = endTime - startTime;

mach_timebase_info_data_t sTimebaseInfo;
mach_timebase_info(&sTimebaseInfo);
uint32_t numer = sTimebaseInfo.numer;
uint32_t denom = sTimebaseInfo.denom;
uint64_t elapsedNano = (elapsedTime * numer / denom);
NSTimeInterval elapsedSeconds =  elapsedNano / (CGFloat)NSEC_PER_SEC;


NSLog(@"elapsed time: %f", elapsedSeconds);