我正在开发一个 iPhone 应用程序,它有一个相当大的 UITableView,其中的数据来自网络,所以我正在尝试优化它的创建和使用。
我发现 dequeueReusableCellWithIdentifier
非常有用,但是看了很多源代码使用这个,我想知道我对这个函数的使用是不是很好。
人们通常会这样做:
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"];
// Add elements to the cell
return cell;
这就是我的做法:
// The cell row
NSString identifier = [NSString stringWithFormat:@"Cell %d", indexPath.row];
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell != nil)
return cell;
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier];
// Add elements to the cell
return cell;
不同之处在于人们对每个单元格使用相同的标识符,因此将一个出列只会避免分配一个新的。
对我来说,排队的目的是给每个单元格一个唯一的标识符,所以当应用程序请求一个它已经显示的单元格时,既不需要分配也不需要添加元素。
很好我不知道哪个最好,“通用”方法将表格的内存使用量限制为它显示的确切单元格数,而我使用的方法似乎有利于速度它保留所有计算的单元格,但会导致大量内存消耗(除非队列有内部限制)。
这样使用是不是我错了?还是仅取决于开发人员的需求?
最佳答案
dequeueReusableCellWithIdentifier
的目的是使用更少的内存。如果屏幕可以容纳 4 或 5 个表格单元格,那么通过重用,即使表格有 1000 个条目,您也只需在内存中分配 4 或 5 个表格单元格。
第二种方式没有重用。与仅使用表格单元格数组相比,第二种方式没有任何优势。如果您的表有 1000 个条目,那么您将在内存中分配 1000 个单元格。如果你打算这样做,你可以把它们放在一个数组中,然后用行号索引数组并返回单元格。对于具有固定单元格的小表格可能是一个合理的解决方案,对于动态表格或大表格则不是一个好主意。
关于iPhone - dequeueReusableCellWithIdentifier 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2928873/