UITableView是iOS开发中使用最频繁的控件之一, 所以关于UITableView的优化问题也是经常要去面对的一个问题.
一. 首先是性能优化.
主要的两个优化方式:
a.
保证UITableViewCell正确设置了reuseIdentifier, 如果相同的cell未进行重用, 那么每显示一行cell就会创建一个全新的cell, 这对性能的影响是相当大的.
b.
保证heightForRowAtIndex: 方法中除了计算cell高度以外没有其他无关操作, 一定要缓存行高, 因为这个方法调用非常的频繁, 重复不必要的操作和计算会损耗性能.
二. 关于子视图的优化:
a.
保证所有的子视图都指定了背景颜色, 很多程序员在开发中都会遇到的一个情况就是在两个控制器之间跳转时, 如果目标控制器没有设置背景颜色, 就会出现卡顿的现象, 但其实cell也是一样的, 如果子控件没有指定背景颜色, 会影响TableView滚动的流畅度.
b.
保证不透明视图的opaque属性都是YES,因为系统在渲染视图的时候如果发现opaque属性的值是YES, 那么就会优化一些渲染的过程, 提高性能. 所以尽量少用或不用透明图层可以极大的提高渲染速度.
c.
保证UIImageView中显示的图片大小跟UIImageView的大小相同, 因为在运行中缩放图片是以个会耗费资源的操作. 如果图片是从远端服务器加载是不能控制图片大小的, 需要下载完成后马上在子线程中执行缩放的操作.
关于异步操作的优化:
d.
如果cell中的内容来自网络或者远端服务器, 一定要保证是异步加载, 并缓存请求到的结果. 避免阻塞和数据的重复请求.
e.
图形界面的绘制尽量转到异步操作, 这样可以避免图片的绘制会打断用户交互了
三. 关于XIB文件优化:
f.
如果是复杂且需要高效的界面, 尽量将SB和XIB创建的界面改为代码创建, 减轻系统需要进行XML转码操作的负担.
四. 是内存优化.
a.
尽量保证一个XIB文件中只有一个视图, 因为加载一个XIB的时候, 所有的内容都被放在内存里, 包括图片素材, 如果有一个不会即刻用到的视图, 那么就是在浪费我们宝贵的内存了, 并且过于庞大的XIB会延长app的启动时间, 所以没有必要的话, 最好在SB中创建视图.
b.
一定要处理内存警告, 在收到内存警告后,否则就可能会因为内存占用过高出现闪退.