iOS 列表调优

什么问题

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

 

如何解决

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

 

原因分析

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

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

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

 


 

优化方案

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

 

猜你喜欢

转载自www.cnblogs.com/yangthinker/p/9930417.html