博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS显示当前页面帧数
阅读量:6432 次
发布时间:2019-06-23

本文共 1012 字,大约阅读时间需要 3 分钟。

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

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

从网上找到的显示当前页面帧数的,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),这一精巧的设计,完美的解决了循环引用的问题。

转载地址:http://grxga.baihongyu.com/

你可能感兴趣的文章
取消新增的constraints
查看>>
OPTIMIZE TABLE
查看>>
flask框架+pygal+sqlit3搭建图形化业务数据分析平台
查看>>
shell实战训练营Day20
查看>>
jQuery 之 TAB切换菜单
查看>>
mysql 数据库集群搭建:(二)3台CentOS-7安装Percona-XtraDB-Cluster-57集群
查看>>
Jenkins实战演练之Windows系统节点管理
查看>>
MySQL高可用架构之MHA
查看>>
1.8 nginx域名跳转
查看>>
PHP面向对象之接口编程
查看>>
使用 Docker Compose 管理多个容器实例
查看>>
ThinkPHP 删除数据记录 delete 方法
查看>>
Gradle学习笔记(二)--创建Java项目
查看>>
IntelliJ IDEA 快捷键
查看>>
qury-easyui DataGrid 整合struts2增删查该入门实例(三)
查看>>
if a point is inside a square with mathematics
查看>>
Ubuntu(Linux)使用Eclipse搭建C/C++编译环境
查看>>
skyline无插件web的数据加载解析
查看>>
python基础学习第一天
查看>>
硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
查看>>