首页 > 编程知识 正文

ios 显示帧率,ios怎么显示帧数

时间:2023-05-04 09:35:04 阅读:245952 作者:859

之前对iOS的性能优化,进行过实践经验的总结。但是当被问到如何显示当前页面的帧数时,还是木有回答出来,太尴尬?了。

面试官当场告诉我使用系统自带的CADisplayLink即可实现,回来之后马上从网上搜索资料。

从网上找到的显示当前页面帧数的demo,demo里使用YYFPSLabel来显示页面帧数的,YYFPSLabel是从YYKit框架抽取出来的。

附上显示帧数的代码如下:

- (void)testFPSLabel {

_fpsLabel = [YYFPSLabel new];

_fpsLabel.frame = CGRectMake(200, 200, 50, 30);

[_fpsLabel sizeToFit];

[self.view addSubview:_fpsLabel];

}

看了YYFPSLabel的实现代码,发现YYFPSLabel也是采用的CADisplayLink来实获取当前页面的帧数的。

计算当前页面帧数的核心代码如下:

if (_lastTime == 0) {

_lastTime = link.timestamp;

return;

}

_count++;

NSTimeInterval delta = link.timestamp - _lastTime;

if (delta < 1) return;

_lastTime = link.timestamp;

float fps = _count / delta;

_count = 0;

demo中还有另外的一个类YYWeakProxy,这个类的作用是为了解决循环引用问题。因为在使用CADisplayLink时,如果直接用 self 或者 weakSelf,都不能解决循环引用问题。

实现的原理: 使用 NSProxy 持有 NSTimer 的 target不再用 NSTimer 直接持有 self,就不会导致 timer 对 self 的循环强引用了。

将 timer 的 target 从 self ,变成了中间人 NSProxy,timer 调用 target 的 selector 时,会被 NSProxy 内部转调用 self 的 selector。

中间人(NSProxy),这一精巧的设计,完美的解决了循环引用的问题。

开发工具-Eclipse(25个最佳闪亮的Eclipse开源工具)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。