Я работаю над iPhone-приложением, которое имеет довольно большой UITableView с данными, взятыми из Интернета, поэтому я пытаюсь оптимизировать его создание и использование.
Я узнал, что dequeueReusableCellWithIdentifier очень полезен, но после просмотра многих исходных кодов, используя это, мне интересно, является ли использование, которое я использую для этой функции, хорошим.
Вот что обычно делают люди:
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"Cell"];
// Add elements to the cell
return cell;
И вот как я это сделал:
// The cell row
NSString identifier = [NSString stringWithFormat:@"Cell %d", indexPath.row];
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell != nil)
return cell;
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:identifier];
// Add elements to the cell
return cell;
Разница заключается в том, что люди используют один и тот же идентификатор для каждой ячейки, поэтому исключение одного из них позволяет избежать добавления нового.
Для меня задачей очереди было предоставить каждой ячейке уникальный идентификатор, поэтому, когда приложение запрашивает, что ячейка уже отображена, не требуется ни выделение, ни добавление элементов.
В тонком я не знаю, что лучше, "общий" метод позволяет использовать память таблицы для точного количества ячеек, которые он отображает, но метод, который я использую, по-видимому, он хранит все рассчитанные ячейки, но может вызвать большой объем памяти (если нет внутреннего предела для очереди).
Неправильно ли я использовать его таким образом? Или это зависит только от разработчиков, в зависимости от его потребностей?