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 条评论
登录 后参与评论

相关文章

来自专栏别先生

Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加

Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略; 2:第二步,创建数据库和数据表,表结构如下所...

35710
来自专栏技术总结

单例的必要认识(深刻理解)

20310
来自专栏JAVA技术站

Sharding-Jdbc分库分表的导读

Sharding-JDBC是一个开源的分布式数据库中间件,它无需额外部署和依赖,完全兼容JDBC和各种ORM框架。Sharding-JDBC作为面向开发的微服...

8554
来自专栏ShaoYL

iOS--多线程之GCD

34111
来自专栏程序员与猫

浅谈 EF CORE 迁移和实例化的几种方式

出于学习和测试的简单需要,使用 Console 来作为 EF CORE 的承载程序是最合适不过的。今天笔者就将平时的几种使用方式总结成文,以供参考,同时也是给本...

2285
来自专栏大内老A

Dora.Interception,为.NET Core度身打造的AOP框架 [5]:轻松地实现与其他AOP框架的整合

这里所谓的与第三方AOP框架的整合不是说改变Dora.Interception现有的编程,而是恰好相反,即在不改变现有编程模式下采用第三方AOP框架或者自行实现...

612
来自专栏向治洪

Hibernate入门

Hibernate是什么     Hibernate是一个轻量级的ORMapping框架     ORMapping原理(Object Relational M...

1996
来自专栏咸鱼不闲

过滤器, 拦截器,监听器

下面介绍过滤器和拦截器以及监听器的使用方法: 执行顺序 :监听器 > 过滤器 > 拦截器

2303
来自专栏老码农专栏

AAA - ActFramework的安全框架II - 应用

1772
来自专栏Google Dart

Spring Task 组件使用二 原

651

扫码关注云+社区