Как работает dequeueReusableCellWithIdentifier:? - PullRequest
4 голосов
/ 19 июля 2011

Я хотел бы получить некоторую точность относительно dequeueReusableCellWithIdentifier:kCellIdentifier.Если я хорошо понимаю, то по настоящему документу NSLOG предполагается печатать только один раз.Но это не так.Так в чем же смысл dequeueReusableCell?Это эффективно только с пользовательской ячейкой?

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


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier];
    if (cell == nil)
    {
        NSLog(@"creation of the cell");
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier] autorelease];
    }

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.textLabel.text = [[self.table objectAtIndex:indexPath.row] objectForKey:kTitleKey];


    [cell setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.6]];
    return cell;
}

Ответы [ 2 ]

10 голосов
/ 19 июля 2011

Он вступает в игру только тогда, когда инициализированные ячейки перемещаются за пределы экрана.

Например, скажем, у вас есть табличное представление, которое отображает десять ячеек на экране, но имеет в общей сложности сто строк.Когда представление загружается впервые и заполняется представление таблицы, будет инициализировано десять ячеек (, следовательно, несколько NSLog операторов ).Когда вы начинаете прокручивать вниз, ячейки, которые исчезают в верхней части экрана, помещаются в очередь повторного использования.Когда нужно нарисовать новые ячейки, появляющиеся снизу, они удаляются из очереди повторного использования вместо инициализации новых экземпляров, тем самым снижая использование памяти.

Также важно настроить свойства ячейки вне условия if (cell == nil).

5 голосов
/ 19 июля 2011

Начните прокручивать таблицу, и вы увидите, что сообщение журнала больше не появляется.

если у вас есть таблица высотой 1000 пикселей и высота каждой ячейки 100 пикселей, вы увидите сообщение журнала 11 раз.
Потому что 11 - это максимальное количество ячеек, видимых одновременно.
Это 11, а не 10, потому что когда вы прокрутите немного вниз, будет 9 ячеек, которые полностью видны, и 2 ячейки, которые видны только частично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...