iOS卡顿优化探究学习

1、iOS的CoreAnimation并非只是一些动画API,本质上是控制图层的分解、存储和管理体系。会涉及绘图、效率等问题。

2、CALayer同UIView类似都是一些被层级关系树管理的矩形块,并管理子图层位置,都可以包含图片、文字等内容,并有一些API来做动画。最大的不同是CALayer不能处理用户交互。每个UIView都有对应的layer图层并可以添加更多图层,真正的动画是layer实现,UIView是对其的一个封装。并且是一种抽象类时候对功能的分离。

3、drawRect:如果方法被调用哦,就会为视图分配一个寄宿图,大小等于视图大小*contentScale。会造成cpu资源和内存的浪费。

4、通常将图像处理、屏幕渲染交给GPU处理会更快,但是如果GPU资源占用过高,性能就会开始下降。

5、图层绘制效率影响:

a太多的几何结构

b重绘,主要是重叠的半透明图层

c离屏绘制

d图片过大

6、问题查找:

使用xcode工具

Time Profilter 查看函数耗时时间

CoreAnimation查看离屏渲染、图层混合度,

OpenGL ES Driver  查看GPU占用率

7、优化方案

a禁止在不断变动的图层上面进行光栅化(shouldRasterize),在不变的地方设置为YES,其优点是将一个固定的图层体系折叠成单张图片,并进行缓存,这样就不需要每一帧重新合成。

b避免重绘、例如避免frame的改变

c控制离屏渲染数量

d自动布局会增加cpu开销

d cornerRadius和maskToBounds同时作用时会触发离屏渲染,如果要避免可采用CAShaperLayer画矩形


总之,要在速度与耗能之间进行平衡,GPU和CPU之间平衡


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值