【发布时间】:2011-02-25 02:41:00
【问题描述】:
我正在开发一个 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;
不同之处在于人们对每个单元格使用相同的标识符,因此将一个出列只会避免分配一个新的。
对我来说,排队的目的是给每个单元格一个唯一的标识符,所以当应用程序请求一个它已经显示的单元格时,既不需要分配也不需要添加元素。
很好我不知道哪个最好,“通用”方法将表格的内存使用量限制为它显示的确切单元格数,而我使用的方法似乎有利于速度它保留所有计算的单元格,但会导致大量内存消耗(除非队列有内部限制)。
这样使用我错了吗?还是仅取决于开发人员的需求?
【问题讨论】:
标签: iphone objective-c optimization uitableview