iPhone - dequeueReusableCellWithIdentifier 用法

标签 iphone objective-c optimization uitableview

我正在开发一个 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/

相关文章:

iphone - iphone 可以多快的 fps 截取屏幕截图?

ios - 使用 Storyboard引用

objective-c - 使用 NSSortDescriptor 对数组进行排序

ios - UIView animateWithDuration 如何通过触摸事件取消(不与 MapView 交互)

optimization - 如何将四个无符号字节(0-255)编码为浮点并使用HLSL再次返回?

java - 二进制优化搜索

iphone - 定义屏幕宽度常量

android - 手持 iPhone Android 特定 CSS 根本不起作用

MySQL:合并几个大表并添加值,优化

iphone - 声音不会在我的应用中播放