IOS之遇到tableView卡顿嘛?会造成卡顿的原因有哪些?
可能造成tableView卡顿的原因有:
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。所以我的建 议是:只要是固定 就写预估 来减少 调 次数提升性能。如果是动态的就要写预估算法 ,每个的缓存字典来减少代码的调用次数即可.
12. 要做多余的绘制 作。 在实现drawRect:的时候,它的rect参数就是需要绘制的区域,这个区域之外的 需要进 绘制.如上 中,就可以 CGRectIntersectsRect、CGRectIntersection或 CGRectContainsRect判断是否需要绘制image和text,然后再调绘制方法。
13.预渲染图像.当新的图像出现时,仍然会有短暂的停顿现象。解决的办法就是在bitmap context 先将其画 遍,导出成UIImage对象,然后再绘制到屏幕;
14.使用正确的数据结构来存储数据。
【IOS之遇到tableView卡顿嘛?会造成卡顿的原因有哪些?】希望可以帮到你~
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天