不重复的UITableView单元格

时间:2012-06-25 10:51:30

标签: objective-c ios xcode

这可能是一个非常简单的问题,但我有点困惑如何正确地做到这一点。我读到我需要删除这行代码:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

但是我如何检查细胞是否为零?我使用的完整代码如下。如果有人也可以解释一下此行的目的:

static NSString *CellIdentifier = @"Cell";

整个代码:

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}

1 个答案:

答案 0 :(得分:4)

您在发布的代码中正确使用它。拥有静态类型修饰符的原因是为了防止每次调用方法时都创建和初始化变量。在每种方法中自动创建和删除“正常”变量,您实际上可以这样做:

auto NSString* cellId = @"CellId";

auto类型修饰符是默认值(编译器添加它)并且为了保存键入,人们不会添加它。通过将static放在类型前面,可以更改此行为,以便在程序启动时仅将变量初始化一次。它被称为static,因为每次调用方法时,带有类型修饰符static的变量中的数据都不会自动从堆栈中删除...它是静态的/不会更改。由此得名。

由于您一遍又一遍地使用单元格id,因此每次初始化它只会初始化一次而不是每次调用方法时创建/删除变量都会带来很小的性能优势。对于具有大量单元格的表格尤其如此。但是我从来没有看到使用autostatic变量之间的区别,但这至少是它背后的想法。

您不应该删除[tableView dequeueReusableCellWithIdentifier:CellIdentifier];行。您需要能够从tableview中出列表视图单元格。