-(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,为什么它是静态的?
答案 0 :(得分:6)
这个想法是表格视图在使用后不一定会破坏单元格,但可以回收它以提高性能。标识符用于返回正确的缓存单元格,而不是另一个表格视图的缓存单元格。例如,如果您有两种不同的单元格类型,您甚至可以为同一个表格视图使用多个标识符。
想象一下,有一个由标签和图像视图组成的单元格。初始化单元格时,需要创建单元视图,需要创建标签,需要创建图像视图。现在,该类型的每个单元看起来都一样,它们的内容只有不同。因此,不是每次都重复进行此设置,有时会返回未使用的单元格,只会填写新内容。
答案 1 :(得分:3)
静态变量只会被构造一次,它会在调用cellforrowatindexpath方法的时候始终避免内存创建。它的生命周期将存在于该文件中,因为它是局部变量,而对于全局静态,它的生命周期将一直存在申请
答案 2 :(得分:1)
CellIdentifier
是一种标记tableViewCells
的方法。这样,uitableView
可以知道哪些uitableviewcell
在需要重复使用时才能撤出。
答案 3 :(得分:0)
细胞回收已在previous question中解释。静态变量对于特定的.m文件是“全局的”,它们在类的所有实例之间共享。这是有道理的,因为这个字符串只是一个标识符 - 对于每个类的实例,具有相同字符串的单独实例将是一种浪费。
答案 4 :(得分:0)
您尝试使用像标记这样的单元格标识符来标识单元格,并通过对其进行重新排序来重新使用单元格。
它是静态的,因为这种方式只能定义一次,但它在此方法中的所有对象之间共享。