专栏首页非典型技术宅iOS核心机制之一:UITableView的Cell重用机制1 传统重用机制2. 注册机制的重用3. 注册cell的三种方式4. 调试小技巧之检测异常断点

iOS核心机制之一:UITableView的Cell重用机制1 传统重用机制2. 注册机制的重用3. 注册cell的三种方式4. 调试小技巧之检测异常断点

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

虽然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

优点:

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

缺点:

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • UITableView进阶:常用代理方法及属性1. 常用属性2. 进阶的常用代理方法

    stanbai
  • 设置Cell的行高:五种方法及优先级1. 四种基本设置方法2. 四种方法的优先级3. 自动进行计算cell的行高

    stanbai
  • Swift多线程:使用GCD实现异步下载图片1. GCD基础知识2. GCD的基础应用3. GCD的服务质量(优先级)

    stanbai
  • 在iOS中怎样创建可展开的Table View?(上)

    几乎所有的app都有一个共同特征,它们向用户提供了多个视图控制器来导航和工作.这些视图控制器可以用在很多方面,例如,简单地显示某种信息在屏幕上,或者从用户的输入...

    hrscy
  • iOS 9 Storyboard 教程(一下)

    你可以直接从storyboard编辑器中,使用原型cell你可以很容易的为你的tableViewCell设计一套自定义的布局.

    hrscy
  • 处于UITableView中心线cell的处理

    且行且珍惜_iOS
  • 2017第八届蓝桥杯决赛(C++ B组)2.磁砖样式

    小明家的一面装饰墙原来是 310 的小方格。 现在手头有一批刚好能盖住2个小方格的长方形瓷砖。 瓷砖只有两种颜色:黄色和橙色。 小明想知道,对于这么简陋的...

    racaljk
  • 面试题 —— 数字幻方

    请将 1~9 这 9 个数字填入 3x3 的矩阵,使得矩阵的横三行竖三列以及两对角线的数字和相等,找出所有的填充方案。比如下面的这个幻方就是满足条件的方案之一

    老钱
  • 论PR | Innovus 中cell density计算解析

    在Innovus 中可用如下命令来report density, 不同命令的应用场景和计算方式有所不同。

    老秃胖驴
  • 解决UITableView中Cell重用机制导致内容出错的方法总结

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一个个的UITableViewCell,可以让U...

    freesan44

扫码关注云+社区

领取腾讯云代金券