Objective-C/iOS 获取页面的帧率

获取页面的帧率是通过这个CADisplayLink刷帧方法的调用次数计算的。

//以下代码加在合适的地方
_link = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick:)];
[_link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];


- (void)tick:(CADisplayLink *)link {
    if (_lastTime == 0) {
        _lastTime = link.timestamp;
        return;
    }
    _count++;
    NSTimeInterval delta = link.timestamp - _lastTime;
    if (delta < 1) return;
    _lastTime = link.timestamp;
    float fps = _count / delta;
    NSLog(@"页面帧率:%f",fps);
    _count = 0;
}

用此方法统计帧率的有一些性能损耗,所以需要控制在某些时刻采集一定的样本就及时暂停。暂停将之从RunLoop中移除即可:

[_link removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];

推荐阅读更多精彩内容