Cell的复用

2016-11-13  本文已影响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的重新加载(无论是复用还是创建),会重新赋值。

上一篇 下一篇

猜你喜欢

热点阅读