UITableViewCell - 理解"可重用"

Jac*_*Lam 3 iphone uitableview ios

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *reuseIdentifier = @"cellReuse";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];
        }

        NSManagedObject *manageObject = [self.fetchResultController objectAtIndexPath:indexPath];
        cell.textLabel.text = [manageObject valueForKey:@"title"];
        cell.detailTextLabel.text = [manageObject valueForKey:@"subtitle"];

        return cell;
}
Run Code Online (Sandbox Code Playgroud)

我从一本书中读到,单元格是一种"可重用的视图".我在理解"可重用"方面遇到了一些问题.

任何人都能以简单的方式解释细胞的机制吗?

小智 13

问题是:表视图可能有数千行(或数百万行,无论如何).为每个数据行创建一个单独的单元格将是繁琐和浪费的.相反,表视图仅询问与屏幕上同时显示的行数(通常不超过10-15-20个单元格).这是可管理的,不会占用大量内存,并且无论如何都不能在显示器上看到所有行.

因此,当表视图需要显示一个新单元格时(因为用户已经滚动了视图),它需要一个单元格离开可见区域,并将其排队到最后,重新使用它.


小智 6

一些事实

  1. 表中可见的所有单元格都有一个UITableViewCell.
  2. UITableView当它们离开可视窗口时,唯一将单元格置于可重用队列中.
  3. 第一次,使用Nib文件加载表中的所有可见单元格(7,8,10次,具体取决于单元格的高度).
  4. 一旦你开始滚动表,就是当UITableView开始放入UITableViewCells可重用队列并且可以在表的其他位置重用时.

    为什么在dequeueReusableCellWithIdentifier引用中没有解释这种行为真是太神奇了.可能是因为它显而易见......这篇文章专门针对那些和我一样朦胧的人.