Извлечения повторного использования ячеек UITableView


Почему этот код работает нормально:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.text = [NSString stringWithFormat:@"cell%i%i", indexPath.section, indexPath.row];
    }    
    return cell;
}

Насколько я понял идентификаторы ячеек, этот код должен работать корректно только в том случае, если я перемещаю строку cell.textLabel.text = ... из оператора if. Другими словами, почему этикетки имеют правильный текст???

2 2

2 ответа:

Попробуйте создать больше ячеек, чем вы можете видеть на экране, и как только они будут удалены из очереди, у них больше не будет текста, который вы ожидаете...

В основном это будет нормально для 5 или около того строк, которые вы видите на экране, но как только вы начнете прокручивать, вы увидите некоторые "интересные" вещи:)

Созданная ячейка используется повторно. Это означает, что объект помечается для повторного использования (и таким образом вы сохраняете полное создание объекта).

Поэтому, как только он прокручивается вне экрана, ячейка помечается как многоразовая. Из-за этого вы сначала проверяете, есть ли многоразовые ячейки ([tableView dequeueReusableCellWithIdentifier:), прежде чем создать новую.

Текст, который вам нужно задать, так как он (вероятно) отличается для каждой ячейки вашей таблицы, но не имеет ничего общего с создание/уничтожение объекта.