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