Предыдущие ответы не очень понятны.
Итак, давайте пройдемся по нему.
Повторное использование
Когда ячейка таблицы выходит за пределы экрана (например,больше не видны) он попадает в пул ячеек, которые доступны для повторного использования, эти ячейки помечены reuseIdentifier
, что может быть похоже на ваш пример @"Cell"
.
Зачем нам нуженpool?
alloc
/ init
Использование объектов стоит дорого, и при прокрутке UITableView
вы потенциально могли бы делать это много, особенно если пользователь прокручивает быстро.Это приведет к тому, что ваша UITableView
прокрутка станет медленной и резкой.
Итак, как мне использовать повторно?
Метод tableView: cellForRowAtIndexPath:
Основная цель в жизни - дать вамUITableView
ячейка для отображения.
Итак, первое, что вы делаете в этом методе, это вызываете метод dequeueReusableCellWithIdentifier:
.Метод dequeueReusableCellWithIdentifier:
проверяет пул ячеек, доступных для повторного использования, и возвращает nil
, если таковых нет, или возвращает UITableViewCell
для настройки.
Следующая проверка:
if (aCell == nil) {
используется, чтобы определить, есть ли у нас ячейка, которую мы можем просто настроить, или нам нужно создать новую.
Если aCell
равен nil
, тогда UITableViewCell
не было доступно дляпоэтому мы должны создать его и дать ему первоначальный конфиг.Это прекрасное время для установки таких вещей, как цвета и другие свойства, которые нужно установить только один раз .
После этого блока if
мы знаем, что у нас есть UITableViewCell
, который мы простонеобходимо настроить, чтобы теперь вы могли идти дальше и устанавливать любые метки или свойства, которые различны для каждой ячейки.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
ViewRoutesCell * aCell = (ViewRoutesCell *)[tableView dequeueReusableCellWithIdentifier:@"ViewRoutesCell"];
if (aCell == nil) {
// Create a new cell and do any one time config
}
// Configuration that is different for every cell
return cell;
}