iOS UITableViewCell的性能优化(避免卡顿)
2017-08-01 00:00
796 查看
摘要: iOS应用中,UITableView应该是使用率最高的视图。
当有复杂的设计时,性能的优化就显得犹为重要。
###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。
所以我的建议是:只要是固定行高就写预估行高来减少行高调用次数提升性能。如果是动态行高就不要写预估方法了,用一个行高的缓存字典来减少代码的调用次数即可。
当有复杂的设计时,性能的优化就显得犹为重要。
###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。
所以我的建议是:只要是固定行高就写预估行高来减少行高调用次数提升性能。如果是动态行高就不要写预估方法了,用一个行高的缓存字典来减少代码的调用次数即可。
相关文章推荐
- IOS详解TableView——性能优化及手工绘制UITableViewCell
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- ios-day06-02(UITableView常见属性、UITableViewCell的常见属性、性能优化等)
- 【Android】RelativeLayout性能优化,避免画面卡顿
- iOS纯代码自定义UITableViewCell及性能优化
- iOS性能优化:Instrument 调试界面卡顿
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- iOS UITableViewCell 重用及 性能优化
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- IOS详解TableView——性能优化及手工绘制UITableViewCell
- IOS详解TableView——性能优化及手工绘制UITableViewCell
- iOS开发UI篇—UITableviewcell的性能优化和缓存机制
- iOS开发——项目实战总结&UITableView性能优化与卡顿问题
- IOS学习笔记45--UITableView性能优化
- iOS之UI随笔-UITableView的性能优化
- iOS开发那些事--性能优化–内存泄露问题的解决(转)