UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化

1.关于UItableView的优化现在网上已经有很多,无外乎以下几种

1.提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法(最好是在数据下载完成转model的时候在model里面计算)

2.滑动时按需加载,这个在大量图片展示,网络加载的时候很管用!(SDWebImage已经实现异步加载,配合这条性能杠杠的

3.正确使用reuseIdentifier来重用Cells

  4.尽量使所有的view opaque,包括Cell自身

5.尽量少用或不用透明图层

6.如果Cell内现实的内容来自web,使用异步加载,缓存请求结果

7.减少subviews的数量

8.尽量少用addViewCell动态添加View,可以初始化时就添加,然后通过hide来控制是否显示

9.尽量少使用cornerRadiusmaskToBounds来设置圆角(maskToBounds很掉帧,可以以切图代替)

10.如果是图片列表为主的cell尽量不使用imageNamed来设置图片,使用imageWithContentsOfFile来代替(原因可看:http://blog.csdn.net/lg_sun/article/details/46895457



提前计算并缓存好高度可以看一下我写的方法(可以使用自己的风格,我这只是个例子):

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第1张图片UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第2张图片


今天咱们来看一种导致掉帧的情况---------->cell里面循环创建view 导致卡顿掉帧

循环的addSubView是很掉帧杀手

这种情况还是比较多的,看一下我们的需求

单个cell是一个门店下边带最多5个商品,和不定量的商家推荐。这样的话里面的view1和view2就是根据后台数据循环创建的

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第3张图片ccUITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第4张图片


先看一下未优化之前的tableVIew滑动帧数,也就是30左右(30以下用户可以明显感觉到屏幕的卡动,可以称为垃圾APP了)

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第5张图片



未优化之前

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第6张图片

优化过程:

既然最多时5个view1,那就用内存和cpu来换取流畅度吧

1.直接在cell初始化的时候创建5个view1,用isHiddent来控制显示个数

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第7张图片

2.根据model数据来付值和判断view的显隐性

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第8张图片


看一下优化之后tableVIew滑动帧数,差不多达到50 ,这是后看起来已经相当流畅了

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第9张图片



但是这个时候还有一个问题,因为我们是分页加载,就是一次性加载10天数据,滑动到最后一条数据之后用户上拉加在下一个10条,这样在分页加载的时候还是有一个明显的加载过程

优化前代码:

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第10张图片



优化后代码

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第11张图片

这样用户就不会察觉分页加载数据的那个过程




提示:页面帧数可以用core animation(用真机,因为模拟器的cpu,内存都是虚拟的)

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第12张图片

UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化_第13张图片



你可能感兴趣的:(UITableView 卡顿、掉帧、的优化。cell里面循环创建view 导致卡顿掉帧的优化)