我有一个NSStrings数组存储为self.array
。我是iOS的新手,我知道reuseIdentifier最有可能有一个简单的优势,但是当下面的工作原理时,为什么要解决所有这些麻烦和长语法?
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [[UITableViewCell alloc] init];
cell.textLabel.text = self.array[indexPath.row];
return cell;
}
答案 0 :(得分:5)
它是你的卷轴的速度:重复使用单元格可以帮助你顺利滚动表格单元格。
调用[[UITableViewCell alloc] init]
可以减慢事情的速度。对于无所事事的细胞更难注意到,细胞越重,细胞就越不平滑。预先分配和重用单元格可以让您获得视觉上令人愉悦的滚动。
此外,丢弃CPU周期会耗尽电池电量。用户可以以相当快的速度滚动表格,因此您在那里刻录的周期可以快速累加。
添加重用标识符可以消除对屏幕上可见的少数单元格之外的[[UITableViewCell alloc] init]
的调用。当一个单元离开屏幕时,UITableView
将该单元添加到可重用的单元池中,从而消除了单元本身实例的内存分配和释放。当您的tableView:cellForRowAtIndexPath:
请求新单元格时,UITableView
会向您提供已滚动屏幕的实例,因此您需要做的就是将实例重新配置为类似于你需要显示。在许多情况下,重新配置现有单元格要比分配新单元格快得多。
答案 1 :(得分:3)
您当前的方法每次都会创建一个新的单元格,使用reuseIdentifier允许表视图动态重用视图以节省内存分配。
您的代码可能会有效,但它不允许您的tableView尽可能高效。特别是当您的行数增加时。
答案 2 :(得分:0)
如前所述,使用可重复使用的细胞效率更高。您的应用程序将只创建几个单元格而不是数组的数量(或任何您想要显示的单元格)。
但请注意,如果您重复使用之前设置的单元格,则应重新定义其内容。
例如,如果要在单元格中显示书籍标题和副标题,并设置包含内容的单元格,并重复使用该单元格,但是该时间没有该书的副标题,单元格将显示上一个副标题已经建立了,除非你清除它。