美文网首页iOS控件iOS开发iOS Developer
iOS核心机制之一:UITableView的Cell重用机制

iOS核心机制之一:UITableView的Cell重用机制

作者: 非典型技术宅 | 来源:发表于2016-11-12 08:50 被阅读368次

    附送小白们的调试小技巧& 在末尾

    虽然iOS本身已经做过优化了,在tableView并不会真正的开辟很多空间,会让空间复用。但是CPU还是会不停的alloc,为了降低CPU损耗,就需要使用重用机制。
    需要注意的是,重用是无序的,不是有序的。
    1.先去缓存池中找,是否有可以重用的cell
    2.如果缓存池中没有,创建一个cell,并给它一个重用标示
    3.设置数据

    1 传统重用机制

    //返回每一组的每一行显示什么内容
    - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //    定义一个重用标示,用static修饰。就放在了内存的静态区了。
        static NSString *ID = @"A";
        
    //    缓存池中寻找是否有可以重用的cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        
    //    如果缓存池中没有ID,创建一个cell,并给它一个重用标示
        if (cell == nil) {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
        }
        
    //    设置数据,赋值给cell
     
        return cell;
    }
    
    

    2. 注册机制的重用

    从iOS6.0开始,添加了缓存池的优化用法。

    1. 先去缓存池中找,是否有可以重用的cell
    2. 如果缓存池中没有,会按照提前注册的方式自动创建一个cell
    3. 设置数据

    3. 注册cell的三种方式

    • 用XIB的方式注册一个cell,并设置重用标示。如果tableView需要一个cell,会加载指定的xib来创建需要的cell
    • 通过制定一个类来注册cell,并设置重用标示。如果tableView需要一个cell,会根据指定的类来自动创建
    • 通过storyboard来注册cell,并设置重用标示。

    3.1 使用storyboard进行注册

    Paste_Image.png

    3.2 通过类注册cell

    一般都在viewDidLoad中提前注册

        [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"A"];
    
    //返回每一组的每一行显示什么内容
    - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    //    定义一个重用标示,用static修饰。就放在了内存的静态区了。
        static NSString *ID = @"A";
        
    //    缓存池中寻找是否有可以重用的cell
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID forIndexPath:indexPath];
        
    //    设置数据,赋值给cell
     
        return cell;
    }
    

    3.3 通过类注册cell的问题

    • 通过以下创建的是默认样式,没有办法加载更多内容。
    - (void)registerClass:(nullable Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);
    
    • 如果要想更多的样式,就建立一个UITableViewCell子类,然后重新这个方法。
    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(nullable NSString *)reuseIdentifier;
    

    4. 调试小技巧之检测异常断点

    每次调试的时候,总是会看到一堆一堆的报错信息。很多时候都只是手贱,写错了点什么,给点提示就知道问题在哪里了。如果系统能够自动断点在出错误的地方,那就太棒了。下面这个方法就是酱紫哒~~~

    Paste_Image.png

    优点:

    • 让每次报错不在主程序中,直接在错误行报错。

    缺点:

    • 但是崩溃错误信息不回输出,连线出现的错误不会提示
    • 如果真的出现了比较复杂的问题,需要一点一点自己阅读报错信息,那就原路返回,把自动断点关闭。

    相关文章

      网友评论

        本文标题:iOS核心机制之一:UITableView的Cell重用机制

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