1.Cell的重用机制,以及重用标识符:
- 如果不重用Cell时,每当一个Cell显示到屏幕上时,就会重新创建一个新的Cell.
- 如果有很多数据的时候,就会堆积很多Cell.如果重用Cell,为Cell创建一个ID.
- 每当需要显示Cell 的时候,都会先去缓冲池中寻找可循环利用的Cell,如果没有再重新创建Cell.
2.避免Cell的重新布局:
- Cell的布局填充等操作比较耗时,一般创建时就布局好.
- 如可以将Cell单独放到一个自定义类,初始化时就布局好.
3.提前计算并缓存Cell的属性及内容:
- 当我们创建Cell的数据源方法时,编译器并不是先创建Cell 再定Cell的高度.
- 而是先根据内容一次确定每一个Cell的高度,高度确定后,再创建要显示的Cell,滚动时,每当Cell进入待显示状态都会计算高度,提前估算高度告诉编译器,编译器知道高度后,紧接着就会创建Cell,这时再调用高度的具体计算方法,省的浪费时间去计算显示以外的Cell.
4.减少Cell中控件的数量:
- 尽量使Cell得布局大致相同,不同风格的Cell可以使用不用的重用标识符.
- 初始化时添加控件,不适用的可以先隐藏.
5.尽量不要使用ClearColor,无背景色,透明度也不要设置为0:
- 渲染耗时比较长.
6.使用局部更新:
- 如果只是更新某组的话,使用reloadSection进行局部更新.
7.加载网络数据,下载图片,使用异步加载,并缓存.
8.尽量少使用addView给Cell动态添加view.
9.按需加载Cell,Cell滚动很快时,只加载范围内的Cell.
10.不要实现无用的代理方法,tableView只遵守两个协议.
11.缓存行高:estimatedHeightForRow不能和HeightForRow里面的layoutIfNeed同时存在,这两者同时存在才会出现“窜动”的bug.所以我的建议是:只要是固定行高就写预估行高来减少行高调用次数提升性能.如果是动态行高就不要写预估方法了,用一个行高的缓存字典来减少代码的调用次数即可.
PS : 不透明的视图可以极大地提高渲染的速度.因此如非必要,可以将tableViewCell及其子视图的opaque属性设为YES(默认值),其中的特例包括背景色,它的alpha值应该为1(例如不要使用clearColor);图像的alpha值也应该为1,或者在画图时设为不透明.