美文网首页
UITableView丝滑滚动

UITableView丝滑滚动

作者: SpursGo | 来源:发表于2017-03-28 15:32 被阅读63次

    UITableView的性能优化归根结底就是平衡GPU跟CPU的负载均衡,主要优化途径包括

    1.利用苹果提供的cell重用机制。
    2.不要在 cellForRowAtIndexPath: 方法绑定数据,因为这时 cell 还没显示,而是使用 UITableViews 的委托方法 tableView:willDisplayCell:forRowAtIndexPath:
    3.缓存cell的高度,分为两种情况:1.当cell的高度都是一样的时候,直接给tablview设置rowheight 2.当cell高度不固定的 时候,在绑定model的时候,就把cell的高度计算出来,作为model的一个属性进行缓存。
    4.复杂的cell尽量不适用autolayout,改用frame。因为autolayout会损耗一部分计算性能。
    5.减少子view的数量跟层级。子view的层级越深,渲染到屏幕上的计算量也就越大
    6.对于不透明的view,设置opaque为YES,在绘制这个view的时候就不需要考虑view覆盖的情况
    7.UIView的drawRect方法中使用CoreGraphic来进行CPU的渲染,减少对于GPU的负载。也就是减少cell中UIView,UIImageView,UILabel的使用。
    8.cell layer的shouldRasterize要设置为YES
    9.cell中的图片使用异步加载策略,防止卡住主线程
    10.尽量少用不透明的图层,也就是说吧图层的alpha设置为1
    11.尽量不要用addsubview给cell动态的添加view,可以在初始化的时候添加,但是通过hidden属性来控制是否显示
    12.尽量使用大小一致的图片,也就是为了防止由于大小不一致造成的图片缩放的开销。
    13.设置mask,shadows,opacity,antialiasing会触发离屏渲染,因此要避免使用这些属性。还有设置图片的圆角也会触发离屏渲染,所以可以考虑把绘制操作放在后台线程中执行,绘制完成之后回到主线程进行操作。如果需要在cell中使用上面的属性,可以加上下面两行代码:

    self.layer.shouldRasterize = YES;  
    
    self.layer.rasterizationScale = [UIScreen mainScreen].scale;
    

    14.尽量创建一种类型的cell,可以传入不同的cell类型进行区分,从而创建出不同样式的cell。

    相关文章

      网友评论

          本文标题:UITableView丝滑滚动

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