Хорошо, вот как я считаю, это работает:
Используя dequeueReusableCellWithIdentifier для tableView, вы можете значительно ускорить процесс. Вместо создания множества ячеек, вы просто создаете столько экземпляров, сколько необходимо, то есть столько, сколько видимых (это обрабатывается автоматически). Если вы прокручиваете область в списке, где есть «ячейки», которые еще не получили своего визуального представления, вместо создания новых, вы повторно используете уже существующие.
Вы можете попробовать это сами, выполнив следующее:
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
NSLog(@"new one");
}
else
{
NSLog(@"old one");
}
Помните, вы хотите, чтобы dequeueReusableCellWithIdentifier возвращал ячейку, только если она применима. Поэтому, если ячейка будет использоваться повторно, убедитесь, что она соответствует ситуации. Вот для чего нужны reuseIdentifiers. Обычно вам нужен только один. Но может существовать список, который использует несколько разных типов ячеек, и в этом случае вам придется хранить их отдельно, предоставляя разные reuseIdentifiers. В противном случае вы можете получить ячейку, которую вы рассматриваете как ячейку другого типа (например, ячейку UITableView вместо пользовательской ячейки, которую вы хотели).
Так что, в принципе, насколько я понимаю, используйте разные reuseIdentifiers для разных типов ячеек, где kind означает класс. Если вы используете только стандартные ячейки, вам, вероятно, нужен только один reuseIdentifier.
Этот шаблон проектирования известен как объединение объектов .