iOS页面图层性能和页面卡顿的原因

来源:互联网 发布:淘宝淘口令在哪里设置 编辑:程序博客网 时间:2024/05/17 05:19

iOS页面图层性能和页面卡顿的原因

2016感悟和分享

这是我2017年分享到朋友圈出来的第一篇文章,也是简书第一篇文章.
总结2016,两字经历,遇到很多人,有离开的,有留下的,感谢这些同学朋友同事和经历.即使是进医院的时候我也觉得也挺好的,可能很挣扎,痛苦和闹心,至少经历了才会体会到点什么,才能看明白些什么,虽然现在还要吃药休息,我觉得时间还是要花在有意义的事情上比较好吧,有些无关痛痒的事情也没时间去想,我谈不上情怀,但至少算是出于初衷和喜欢.未来的时间,只要我晚上有时间状态不错的时候,我就会把所见所学所悟整理成文字和demo分享给喜欢iOS技术的同学们.下面这篇文章我是结合我自己所见所学和微信里好朋友的文字文章,感谢!下面入正题:

iOS系统如何把图像内容展示到屏幕,呈现到我们的面前?为什么APP会感觉卡顿?

iOS系统的手机呈现内容到展示,需要先了解CPU和GPU,因为两者的共同参与,我们才能看到APP的内容展示.CPU我们很好理解,但还是要说一下:CPU负责计算显示内容,视图的创建,布局的计算,图片解码,文本绘制都是通过CPU计算出来.那这个GPU是什么?GPU负责把CPU计算出的结果变换合成渲染,然后呈递给帧缓冲区,等待VSync信号到来,才会有我们看到APP的内容.所谓的页面卡顿是因为垂直同步机制,在一个VSync时间内,CPU或者GPU没有完成内容的提交,导致这一帧丢失了,而下一个VSync时间到来不会把上一帧所丢失的内容在做一遍,所以在下一个VSync时间的显示之前,屏幕会保留之前的内容不变.
为了平衡CPU和GPU的负荷运算,不要在两者任何一方做负荷运算

CPU负荷任务

1.计算布局
2.对象创建
3.autolayout复杂的页面会消耗CPU,增加负荷
4.文本计算:文本长宽高比如cell里文本的计算
5.文本控件label,textField,textView,webView,其排版和绘制都是在主线程进行,当显示大量文本时,会很大的消耗CPU.包含文本的视图在改变布局时会触发文本重新渲染,对于静态文本我们应该要尽量减少它所在视图的布局修改
6.图像的绘制,图像绘制我会在之后详细讲解动画的分享文章中细说,CG开头方法消耗CPU资源,我们可以将绘制过程放在后台线程,然后在主线程里讲结果设置到layer的contents中
6.图片的解码 imageNamed加载图片后会立即解码然后系统会缓存起来,有一个问题是我们不知道这个图片何时会释放掉,这个缓存策略没有公开

GPU负荷任务

GPU任务单一,接收提交纹理,点的描述,应用变换,渲染.大体上讲CAlayer的属性大多数都是GPU绘制.GPU之后我会具体用代码补充进来看下效果,就很明显了,先说大概几点:
避免GPU负荷的几点:
1.不要有大量的几何结构,减少在短时间大量图片的显示
2.避免视图的混合,减少透明的视图
3.不要离屏渲染,不要在当前屏幕缓冲区以外开辟的一个缓冲区进行渲染和操作.

总结

相关理论知识,大家可能都有了解,我只是进行总结了下,之后我有时间会尽量完善,在每一个点后面写个demo和链接供大家下载和探讨,也会分享出更多的文章包括我自己写的一套架子和一些实用的工具类,自己总结和所见所学所悟,不对的地方希望各路大牛们指点.有病在身先行休息,最后感谢所有朋友,谢谢.

0 0
原创粉丝点击