为什么我们使用cellIdentifier?

时间:2011-12-08 07:47:07

标签: iphone ios uitableview static identifier

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier  ];
    if(cell == nil){
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.text = [[views objectAtIndex:indexPath.row] objectForKey:@"title"];
    return cell;
}

为什么我们在这里使用CellIdentifier,为什么它是静态的?

5 个答案:

答案 0 :(得分:6)

这个想法是表格视图在使用后不一定会破坏单元格,但可以回收它以提高性能。标识符用于返回正确的缓存单元格,而不是另一个表格视图的缓存单元格。例如,如果您有两种不同的单元格类型,您甚至可以为同一个表格视图使用多个标识符。

想象一下,有一个由标签和图像视图组成的单元格。初始化单元格时,需要创建单元视图,需要创建标签,需要创建图像视图。现在,该类型的每个单元看起来都一样,它们的内容只有不同。因此,不是每次都重复进行此设置,有时会返回未使用的单元格,只会填写新内容。

答案 1 :(得分:3)

静态变量只会被构造一次,它会在调用cellforrowatindexpath方法的时候始终避免内存创建。它的生命周期将存在于该文件中,因为它是局部变量,而对于全局静态,它的生命周期将一直存在申请

答案 2 :(得分:1)

CellIdentifier是一种标记tableViewCells的方法。这样,uitableView可以知道哪些uitableviewcell在需要重复使用时才能撤出。

答案 3 :(得分:0)

细胞回收已在previous question中解释。静态变量对于特定的.m文件是“全局的”,它们在类的所有实例之间共享。这是有道理的,因为这个字符串只是一个标识符 - 对于每个类的实例,具有相同字符串的单独实例将是一种浪费。

答案 4 :(得分:0)

您尝试使用像标记这样的单元格标识符来标识单元格,并通过对其进行重新排序来重新使用单元格。

它是静态的,因为这种方式只能定义一次,但它在此方法中的所有对象之间共享。