iOS 列表调优

mac2022-06-30  66

什么问题

在完成类似于微博这样的内容列表功能的时候,往往会因为各种原因导致列表滑动卡顿,无法给用户提供如丝般顺滑流畅的体验;

 

如何解决

那就要思考为什么会产生卡顿,从卡顿的原因入手,然后提供优化的方案;

 

原因分析

一般来说是两方面的问题,第一是数据计算,第二是图形渲染,一个由CPU来完成,一个由GPU来完成;   理想状况下,如果CPU和GPU的计算能力足够强大,界面是不会出现卡顿的情况的;但是由于移动设备由于自身特点和成本的限制,手机上搭载的CPU和GPU能力是无法达到那样的程度,于是便需要我们从这两方面的细节上进行优化;

由CPU造成的卡顿一般来说是因为运算太过复杂,造成CPU压力过大; 对于GPU来说往往是因为离屏渲染造成GPU的压力过大,iOS openGLES 框架中对视图的渲染一般来说分为两种,一种是在当前屏幕内进行渲染,一种是开辟缓存区进行视图的渲染,离屏渲染是很消耗性能的,原因有两个,一个是因为需要开辟新的缓冲区,二是因为渲染完毕之后要切换上下文;

所以总结来说,产生卡顿的原因有二,第一是CPU运算负荷过大,第二是CPU渲染压力过大;

 


 

优化方案

降低CPU运算负荷 TableView的Cell高度进行提前计算好,然后进行读取设置,而不要放到委托方法里面进行计算;尽量减少XIB 和 Storyboard的使用;尽量避免重复的执行布局代码;尽量少使用约束,因为约束最终还是会转换为Frame,大量的约束会增加CPU的计算量;尽量使用颜色格式为32bit的图片,这样可以避免CPU再进行运算转换; 减少GPU渲染压力 避免切圆角,或者使用CoreGraphic绘制原角;减少cell图层;对于一些重用性比较强的View可以使用CoreText去绘制;按需绘制cell, 可以控制只渲染当前屏幕内展示的几个Cell; 降低内存压力 列表上尽量展示缩略图;列表上的图片尽量缓存;Cell重用;

 

转载于:https://www.cnblogs.com/yangthinker/p/9930417.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)