我找了很多的文档看原因,最后自己解决了 ,不过感觉这个还是很有用的:
1.UITableViewCell重用机制?
UITableView只会创建一屏幕(或者一屏幕多一点)的cell,其他都是取出来重用的。每当cell滑出屏幕的时候,就会放到一个集合中,当要显示某一位置的cell时,会先去集合中取,有的话,就直接拿出来显示,没有在创建。
2.tableView滑动为什么会卡顿?
cell赋值内容时,会根据内容设置布局,也就可以知道cell的高度,若有1000行,就会调用1000次 cellForRow方法,而我们对cell的处理操作,都是在这个方法中赋值,布局等等,开销很大。
3.优化方法?
3.1优化:heightForRow方法处理cell高度。
思路:赋值和计算布局分离。cellForRow负责赋值,heightRorRow负责计算高度。
3.2自定义cell绘制:
各个信息都是根据之前算好的布局进行绘制的。需要异步绘制。重写draeRect方法就不需要异步绘制了,因为drawRect本来就是异步绘制的。图文混排的绘制,coreText绘制。
3.3按需加载(UIScrollView方面):
如果目标行与当前行相差超过指定行数,只在目标滚动范围的前后制定n行加载。滚动很快时,只加载目标范围内得cell,这样按需加载,极大地提高了流畅性。
4.总结
1.提前计算并缓存好高度,因为heightForRow最频繁的调用。
2.异步绘制,遇到复杂界面,性能瓶颈时,可能是突破口。
3.滑动时按需加载,这个在大量图片展示,网络加载时,很管用。(SDWebImage已经实现异步加载)。
4.重用cells。
5.如果cell内显示得内容来自web,使用异步加载,缓存结果请求。
6.少用或不用透明图层,使用不透明视图。
7.尽量使所有的view opaque,包括cell本身。
8.减少subViews
9.少用addView给cell动态添加view,可以初始化的时候就添加,然后通过hide控制是否显示。
上面是我找到的一个文档,感觉很有启发,自己记录一下。
但是我的卡顿原因是以为在tableView那个页面本来已经有了一个请求了,但是还有图片的请求用的原生的方法,导致了卡顿现象,最后把这个方法改成第三方框架(SDWebImage)加载后瞬间好了。