2

有人可以解释两者之间的区别吗

static NSString* CellIdentifier = @"Cell";

NSString *CellIdentifier = [NSString stringWithFormat: @"Cell%i", indexPath.row];

我应该什么时候使用第一个,第二个在哪里?

4

1 回答 1

4
static NSString* CellIdentifier = @"Cell";

这个标识符(假设没有其他标识符)将标识一个单元池,当需要新单元时,所有行都将从该池中提取。

NSString *CellIdentifier = [NSString stringWithFormat: @"Cell%i", indexPath.row];

此标识符将为每一行创建一个单元池,即它将为每一行创建一个大小为 1 的池,并且一个单元将始终仅用于该行。

通常,您会希望始终使用第一个示例。第二个示例的变体如下:

NSString *CellIdentifier = [NSString stringWithFormat: @"Cell%i", indexPath.row % 2];

如果您希望每隔一行都具有某种背景颜色或类似的东西,这将很有用。

如何从此处正确设置单元创建的示例:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"MyIdentifier"] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }

    NSDictionary *item = (NSDictionary *)[self.content objectAtIndex:indexPath.row];
    cell.textLabel.text = [item objectForKey:@"mainTitleKey"];
    cell.detailTextLabel.text = [item objectForKey:@"secondaryTitleKey"];
    NSString *path = [[NSBundle mainBundle] pathForResource:[item objectForKey:@"imageKey"] ofType:@"png"];
    UIImage *theImage = [UIImage imageWithContentsOfFile:path];
    cell.imageView.image = theImage;

    return cell;
}
于 2012-04-04T17:48:37.990 回答