Когда делаются пользовательские ячейки табличного представления? - PullRequest
3 голосов
/ 18 августа 2011

У меня сложилось впечатление, что ячейки табличного представления никогда не освобождались до тех пор, пока приложение не рухнуло, потому что вы можете использовать их повторно.Но когда я профилировал мой табличный вид, я понял, что что-то вызывает в моей пользовательской ячейке Deloc.Какие именно ячейки у деллока есть и можно ли его остановить?

Ответы [ 3 ]

4 голосов
/ 18 августа 2011

Используя общий шаблон «повторного использования»:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellId = @"Foo";
    UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:cellId];
    if (!cell) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]
                autorelease];
    }
    // update the cell content
    return cell;
}

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

Все ячейки освобождаются, когда tableView освобождается, и некоторые ячейки могут быть освобождены при изменении количества строк (скажем, у вас было 20 ячеекдо и только 2 после обновления).

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

1 голос
/ 18 августа 2011

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

0 голосов
/ 18 августа 2011

Табличные представления создают и отбрасывают ячейки по мере необходимости. Это позволяет прокручивать очень длинные списки, не сохраняя их все в памяти. Возможен практически бесконечный прокручиваемый список. Удобный способ сохранить ваши пользовательские ячейки для срока службы табличного представления - добавить их в изменяемый массив при создании. Перед созданием посмотрите в массиве, чтобы увидеть, существует ли он уже.

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