为何要写这篇文章呢?以前写过一篇,由于手机打字不是很方便,还有以前同事用6splus 定下午茶时候,我滑动列表时候居然误觉得是安卓系统的手机。
tableview 流畅度能够用fps来测试,到60帧说明你优化tableView 已经颇有经验了。
以下图怎么测试
接下来从哪方面入手来优化呢?
优化tableView主要有两个思路。缓存操做和异步操做。
问题一:
新人写tableView ,在下面方法中
频繁的建立cell 上的子控件而且添加到cell 上,这是一个要注意的地方,由于这样频繁的建立控件和添加会增长CPU的消耗,间接掉帧。
解决方法呢:在cell 里面以下方法
把全部的控件都建立好。经过隐藏来控制不一样类型的cell显示。以下图示意:
我再解释下。我先按照上图把控件都建立好了。若是没有评论就隐藏掉如上图是隐藏的效果。这样就不会把评论的高度计算到cell高度里。若是图片们没有,那么就不会把图片算里面,视频分享连接就从朋友圈内容开始计算布局。以此类推。
问题二:
tableView 高度问题。tableView 会频繁的调用以下方法
来
先肯定它的contentSize及每一个Cell的位置,而后再调用cellForRowAtIndexPath 来显示。
解决方案:在后台计算好高度以及布局,并缓存到内存重复使用。
后台计算cell 的高度而后放到集合里面下次继续使用。
问题三:有一些显示的内容有富文本,特别是从HTML 转化为属性字符串时候。
解决方案,后台提早转化须要的属性字符串,而后缓存起来避免重复转化带来的CPU性能消耗。能够参考DTCoreText从HTML转化属性字符串的思路,他就是GCD后台转化的。
问题四:图片圆角,阴影等操做,会引发离屏渲染。对CPU性能消耗。
解决方案:用一个图片盖上,或者后台就把图片绘制成圆角图片显示。
问题五:一些显示不少图片的地方,服务器的图片很大,不是你控件的大小。
解决方案:服务器返回控件宽高的图片,好比七牛能够在图片路径拼接参数来获取指定宽高。
问题六:视图层次复杂状况下,CPU把它们混合会很消耗资源
解决方案:若是不能避免,能够把你的视图绘制成一张图片来显示,固然渲染的过程在后台。能够参考
VVeboTableViewDemo的思路。
还有一些其余的技巧,好比不用SB 和Xib 来建立cell 用纯代码来建立,抛弃自动布局用坐标来计算布局。虽然会牺牲不少时间
总之:把一些影响CPU的操做放到后台来操做,而后缓存一切能够缓存的东西。