美文网首页
Cell的复用

Cell的复用

作者: 木子尚武 | 来源:发表于2016-11-13 23:17 被阅读52次

工作一年多的时间,本以为对Cell的复用已经理解透彻了,然而通过这次版本的迭代开发,发现自己远没有达到透彻的标准。于是抽出时间做一下小结:
按照平时的方式,我们创建使用一个UITableViewCell常见的方式是:

  UITableViewCell *cell = [[UITableViewCell alloc] init];
  cell.textLabel.text = @"hello";...

但是这种方式有个弊端,当创建大量的cell的时候容易浪费内存。比如也许刚开始我们我们要创建300个cell的时候还好,因为只有当这个cell真正显示在屏幕上的时候才会被创建(苹果帮我们做了优化,只有当cell即将被显示到屏幕上才会调用tableView:cellForRowAtIndexPath:)。但是当我们在屏幕上滑动tableView的时候依然存在问题,因为在我们滑动的过程中会存在cell的频繁创建与销毁。
幸好苹果提供了更加简洁的方式来创建cell,如下所示:
方式一:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString * const cellIdentifier = @"CellIdentifier";
    UITableViewCell *cell = [tableView   dequeueReusableCellWithIdentifier:cellIdentifier];
    if (!cell) {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        cell.backgroundColor = [UIColor greenColor];
  }
  cell.textLabel.text = @"hello";
  return cell;
}

tableView首先会去缓存池中取绑定cellIdentifier标识的cell,如果取到则返回;如果取不到,则会创建一个新的cell并绑定标识。在使用的过程中一定要注意cell属性设置的时机,一般在if条件括号内的,是cell的固有属性,当这个cell被取出重新复用的时候,会带有这个属性。而if条件判断之外,则会随着每列cell的重新加载(无论是复用还是创建),会重新赋值。

  • 方式二:注册cell,然后直接从缓存获取
       NSString * const cellIdentifier = @"CellIdentifier";
        - (void)viewDidLoad {
            [super viewDidLoad]; 
            [self.tableView registerClass:[UITableViewCell class]   forCellReuseIdentifier:cellIdentifier];
        }
       - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 
        cell.textLabel.text = @"hello"; return cell;
       }
    
    这种方式一般会用在自定义cell的加载中,也就是我们既可以通过一个类也可以通过一个nib文件来加载cell。当注册一个cell并绑定标识后,tableView会先从缓存池中取绑定的标识的cell,若是没有系统则会自动创建一个cell,并绑定标识。

相关文章

  • TableViewCell的复用

    坑:滑动tableView,cell会添加到复用的cell上 初步判断,是cell的复用有问题,看了看,有这么个方...

  • iOS 开发随记

    1、TableViewCell 复用 复用 复用的原则就是样式相同,包括cell的accessoryView或a...

  • RAC用于UITableViewCell复用时的问题

    UITableViewCell和UICollectionViewCell复用使用RAC的问题,解决复用cell中信...

  • 关于cell复用的问题

    cell复用是一个很常见的问题,就如下设置是会造成复用的: UITableViewCell *cell = [ta...

  • Cell的复用

    工作一年多的时间,本以为对Cell的复用已经理解透彻了,然而通过这次版本的迭代开发,发现自己远没有达到透彻的标准。...

  • ReactiveCocoa在UITableViewCell复用的

    1.cell的复用 之前遇到一个蛋疼问题,就是cell中又按钮,当订阅按钮点击事件时候,结果因为cell的复用,出...

  • OC TabelView笔记

    Cell复用 [tableView dequeueReusableCellWithIdentifier:@"cel...

  • UITableViewCell的四种复用的方法

    在实际的开发过程中,我们总要去复用cell,最好自定义cell,然后注册,那么今天来总结一下cell复用的四种方法...

  • tableView性能优化

    1、cell复用 2、异步加载图片

  • iOS开发 cell复用引起的视图重叠

    我在一个项目中需要复用cell,但是第一个cell和第二个cell显示的控件不一样,所以造成第二个cell复用前一...

网友评论

      本文标题:Cell的复用

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