UITableView性能优化,这个问题只要做iOS研发相关工作的人都会遇到,或是工作开发需要,或者面试问题。
我这里整理一下,以便于自己和大家需要时候及时查看!
一,基础的优化,针对API
1,对于页面展示东西很多,上下频繁滑动,需要提前计算缓存好高度。这样做的原因heightForRowAtIndexPath:是调用最频繁的方法,提前计算缓存高度能有效提高滑动时流畅度。
2,正确使用reuserIdentifier来重用cell
3,在heightForRowAtIndexPath:中尽量不使用cellForRowAtIndexPath:,如果你真是需要调用它,那么只用一次然后缓存结果
二,基础的优化,针对view图层
1,尽量减少subviews的数量
2,尽量少用或不用透明图层(带有透明图层的view渲染更好性能)
3,cell涉及到圆角,如果cell还多次复用,尽量换乘图片或者贝尔赛曲线自己画出来,提供的layer切圆角API涉及到layer渲染。
4,尽量避免在cellForRowAtIndexPath:中addView给cell动态添加view,可以在初始化时候添加,然后使用hidden属性判断是否显示。
5,尽量view的Opaque设置为YES,opaque属性提示绘制系统如何处理view。如果opaque设置为YES,绘图系统会将view看为完全不透明,这样绘图系统就可以优化一些绘制操作以提升性能。如果设置为NO,那么绘图系统结合其它内容来处理view。默认情况下,这个属性是YES。)如果屏幕是静止的,那么这个opaque属性的设置与否不是一个大问题。但是,如果view是嵌入到scroll view中的,或者是复杂动画的一部分,不将设置这个属性的话肯定会影响程序的性能!
三,高级的优化
1,滚动很快时,有针对地加载目标范围的cell,按需加载cell,也能提高流畅度
2,cell中涉及大量网络加载的图片,使用异步加载(这一点我们要感谢开发SDWebImage的大神)=。=
3,异步绘制,遇到复杂界面,遇到性能瓶颈时,可能是突破口。
个人日常积累记录,各位请轻喷!!
参考资料:
网友评论