zoukankan      html  css  js  c++  java
  • iOS | TableView的优化

    TableView是iOS组件中最常见、最重要的组件之一,在开发中常常用到,所以对其进行优化是一项必不可少的基本功。

    主要从几个最常用的方面来对其优化:

    1.重用机制
    重用机制是cell最基础的一项优化手段,通过几个方法的组合来实现。

    //注册cell或者head、foot
    - (void)registerNib:(nullable UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);
    - (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    
    - (void)registerNib:(nullable UINib *)nib forHeaderFooterViewReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    - (void)registerClass:(nullable Class)aClass forHeaderFooterViewReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    
    //从缓存池中获取重用对象
    - (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;  // Used by the delegate to acquire an already allocated cell, in lieu of allocating a new one.
    - (__kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0); // newer dequeue method guarantees a cell is returned and resized properly, assuming identifier is registered
    - (nullable __kindof UITableViewHeaderFooterView *)dequeueReusableHeaderFooterViewWithIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);  // like dequeueReusableCellWithIdentifier:, but for headers/footers
    

    另外,尤其要注意的是,在拖动中,因为table会不停的对缓存池中的cell进行存取操作,所以不要动态的去创建或者删除控件。最好是一开始创建好所有需要的控件,然后根据条件去进行显示或者隐藏。


    2.提前准备数据
    一定要提前准备好数据,在tableView显示前,把模型数据加载好,然后对应赋值给cell,避免去边显示边加载的操作。


    3.cell高度
    在tableView滑动的过程中,

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
    

    会调用的非常频繁。如果不是使用预估行高去处理的话,建议可以在模型中添加一个行高属性,在网络加载数据后对控件的高度进行统一计算,然后通过该方法去返回,并且设置只计算一次,保存在缓存中,如果模型行高属性有值,则不再计算。


    4.处理图片
    图片处理很重要,如果直接使用图片加载上去,可能会很严重的影响性能。这里有两种方案去处理,其一是拿到图片之后进行裁剪成合适的图片再放上去,其二是让后台直接将处理好的图片返回给你使用。


    5.避免透明色
    GPU对透明的控件会有性能浪费,所以可能的情况下,要保证所有的控件的背景色不是透明的。

  • 相关阅读:
    JAVA多线程之线程的挂起与恢复(suspend方法与resume方法)
    基于Andoird 4.2.2的同步框架源代码学习——同步发起端
    C#MD5为密码加密
    YOUYOU深入学习Ganglia之三(gmetad的软件架构)
    js原生appendChild的bug
    复选框输入Android Studio 如果修改LogCat的颜色,默认全是黑色看着挺不舒服的
    输出目录文件被多个中间文件输出目录相同的工程包含
    数据对象ajax学习篇9
    function设置jsp页面使用js控制文本框只读,并且按下backspace删除按钮后停在原页面
    资源下载南方cass视频教程,包括文档,数据,很全的
  • 原文地址:https://www.cnblogs.com/JanChuJun/p/10102238.html
Copyright © 2011-2022 走看看