既然我们在谈论programmatically
,仪器不在我的考虑范围之内。
预先列出的一些参考资料:
1. 使用CADisplayLink
根据文档,
持续时间属性提供帧之间的时间量。您可以在应用程序中使用此值来计算显示的帧速率...
所以在我的演示项目中,我为 UITrackingRunLoopMode 添加了一个 displayLink 到 mainRunLoop:
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(screenDidUpdated)];
[self.displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:UITrackingRunLoopMode];
并用于duration
计算 FPS。但出乎我的意料,duration
无论 tableView 是否平滑滚动,它总是 0.016667 (~ FPS 60)。
我如何使 tableView 滞后是添加一行- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
:
NSData *data = [NSData dataWithContentsOfURL:url];
然后我转向displayLink.timestamp
,它起作用了。
2. 观察drawRect:
?
我的第二个想法是观察drawRect:
,我认为当 tableView 滚动时,它drawRect:
会被逐帧调用,然后我可以根据调用之间的时间差异计算 FPS drawRect:
。
但它失败了,因为drawRect:
它只被调用了一次(而单元格被调用了很多次)。这种方式类似于Using CADisplayLink
,但也许我选择了错误的位置/方法(如drawRect:
)来观察,有什么推荐的方法供我观察吗?
问题:
- 仪器如何准确测量 FPS?
- 医生说错了吗
using duration to calculate FPS
? - 观察计算 FPS 的正确/最佳方法是什么?
谢谢!