我想知道为什么在UITableView中需要一个单元格标识符(Cell Identifier)...就像这样:
这有什么用?举个例子吗?
static NSString *cellIdentifier = @"Cell";
这有什么用?举个例子吗?
static NSString *cellIdentifier = @"Cell";
UITableView需要能够流畅快速地显示快速变化的数据,有时候单元格本身还有额外的代码来构建单元格,使用Core Graphics或类似的技术。
UITableView一次只能显示少量单元格,而数据源中可能包含更多“行”。为了减少处理和内存使用,苹果提供了dequeueReusableCellWithIdentifier方法。如果可用,这使得tableview可以重复使用已经实例化的已经从视图中删除的单元格。
UITableView可以包含不同类型的单元格。例如,您可能有一个tableview,其中某些行具有相关联的图像,而其他行则没有,并且具有不同的单元格布局。或者根据某些上游应用程序设置,您有不同的单元格类型。CellIdentifier告诉dequeue方法您要重用哪种类型的单元格,以便您不会收到错误类型的单元格。
static NSString *CellIdentifier = @"Cell with image";
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];
如果找不到可重用的单元格,则必须创建新的单元格,即:
if(cell == nil) ....
它被用作单元格缓存的键,例如:
- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString * CellIdentifier = @"MyCell1";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
...
如果您需要重复使用单元格以节省应用程序内存,那么单元格标识符是很好的选择。例如,如果您的应用程序中有许多单元格,而不是在用户滚动过去后释放单元格,只需修改单元格以包含您正在创建的新单元格的信息即可。这样可以节省空间,因为如果用户一次只查看10个单元格,则无需分配数千个单元格。标识符是系统用来检查是否已经存在具有该标识符的单元格的东西。如果有,它们就会被使用。否则,必须分配新空间并创建新对象。