美文网首页
TableView优化策略

TableView优化策略

作者: CoderShmily | 来源:发表于2017-04-04 09:27 被阅读109次

    1. cell复用

    UITableView最核心的思想就是UITableViewCell的重用机制,设置重用标识符

    2. 尽量不要动态创建cell子空间

    频繁的创建控件和添加会增加CPU的消耗,间接掉帧。在cell初始化时里面,把所有的控件都创建好。通过隐藏来控制不同类型的cell显示。

    3. tableView高度问题

    在后台计算好高度以及布局,然后放到集合里面缓存下次继续使用。

    // - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    // 在heightForRowAtIndexPath:中尽量不使用cellForRowAtIndexPath:,如果你需要用到它,只用一次然后缓存结果
    // 把赋值和计算布局分离。这样让tableView:cellForRowAtIndexPath:方法只负责赋值
    NSDictionary *dict = self.dataList[indexPath.row];
    return [ContacterTableCell cellHeightOfInfo:dict];
    
    // 有下拉插入最上面数据,这个有问题呀
    // NSDictionary *dict = self.dataList[indexPath.row];
    // CGRect rect = [dict[@"frame"] CGRectValue];
    // return rect.frame.height;
    

    4. 栅格化(光栅化)

    美工的术语,将cell中的所有内容,生成一张独立的图像,在屏幕滚动时,只显示图像
    使用Core Animation工具中的“ColorHitsGreenandMissesRed”工具调优 如果使用不当,可能适得其反

    cell.layer.shouldRasterize = YES;
    // 栅格化,必须指定分辨率,不然默认使用 * 1,生成图像
    self.layer.rasterizationScale = [UIScreen mainScreen].scale;
    

    5. 异步绘制

    // apple建议如果cell比较复杂,可以使用
    cell.layer.drawsAsynchronously = YES;
    

    6. UITableView+FDTemplateLayoutCell

    sunnyxx优化UITableViewCell高度计算的那些事
    利用RunLoop空闲时间执行预缓存任务,好久没更新了,iOS10.3开始有些问题,计算不准确

    7. 控件颜色尽量不要使用alpha

    8. 处理图片圆角,阴影等

    图片圆角,阴影等会引起离屏渲染。对CPU性能消耗。不直接用layer属性设置,自己开启上下文画圆角。或用一个图片盖上,或者后台就把图片绘制成圆角图片显示。

    9.滑动时按需加载

    这个在大量图片展示,网络加载的时候很管用,参考VVeboTableViewDemo实现(SDWebImage已经实现异步加载,配合这条性能杠杠的)

    10. 减少图片资源的重采样

    图片资源的重采样是一个费时给力的过程,涉及到插值算法,以双线性插值为例,每插值一个点需要用到周围四个点的像素值,运算量可见一斑。
    一些显示很多图片的地方,服务器的图片很大,不是你控件的大小。直接对于UIImageView设置一个大图,在实际展示的时候会在主线程完成重采样的过程,耗时耗内存。

    请求接口时,服务端根据场景返回尺寸尽可能接近展示的图片资源,或者针对应用场景生成一个适用于使用场景尺寸的图片资源,比如七牛可以在图片路径拼接参数来获取指定宽高。此举既可以节省流量,又可以节省重采样的时间。对于本地图片资源,有可能的话,针对不同场景放置多个尺寸的图片资源

    11. 在快速滑动的时候,忽略中间快速闪过的Cell

    直接借用UIScrollView的delegate判断加载滑动停止目标区域的Cell的内容。实践证明此方法效果还是很明显的,具体例子可以网上搜一下。

    12. 有一些显示的内容有富文本,特别是从HTML 转化为属性字符串时候。

    解决方案,后台提前转化需要的属性字符串,然后缓存起来避免重复转化带来的CPU性能消耗。可以参考DTCoreText从HTML转化属性字符串的思路,他就是GCD后台转化的。

    相关文章

      网友评论

          本文标题:TableView优化策略

          本文链接:https://www.haomeiwen.com/subject/spsaottx.html