Я работаю над приложением для 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;
Разница состоит в том, что люди используют один и тот же идентификатор для каждой ячейки, поэтому удаление одного из них позволяет избежать выделения нового.
Для меня смысл постановки в очередь состоял в том, чтобы дать каждой ячейке уникальный идентификатор, поэтому, когда приложение запрашивает ячейку, которую она уже отображала, ни выделение, ни добавление элемента не должны выполняться.
В порядке Я не знаю, какой из них лучший, «общий» метод сводит использование памяти таблицы к точному количеству ячеек, которые она отображает, в то время как метод, который я использую, похоже, поддерживает скорость сохраняет все вычисленные ячейки, но может привести к большому потреблению памяти (если не существует внутреннего предела для очереди).
Неправильно ли я использовать это таким образом? Или это зависит только от разработчика, в зависимости от его потребностей?