iPhone - Что такое reuseIdentifiers (UITableViewCell)?

Из официальной документации:

Идентификатор повторного использования связан с объектом UITableViewCell, что делегат табличного представления создает с намерением снова использовать его как основание (по причинам производительности) для нескольких строк табличного представления. Это присвоено объекту ячейки в initWithFrame:reuseIdentifier: и не может быть изменен после этого. Объект UITableView поддерживает очередь (или список) в настоящее время допускающих повторное использование ячеек, каждого с его собственным идентификатором повторного использования, и делает их доступными для делегата в dequeueReusableCellWithIdentifier: метод.

http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/reuseIdentifier

Я не понимаю это. Ну, я понимаю основную идею, я думаю, что Вы создаете UITableViewCells и пытаетесь снова использовать столько, сколько Вы можете вместо того, чтобы делать новые (или что-то как этот). Но что точно решает, является ли ячейка допускающей повторное использование? Если у меня есть два идентичных (визуально) ячейки, но с различными текстами (хорошо я предполагаю, что они не совершенно идентичны), у них может оба быть тот же идентификатор? Или у них должны быть различные? Или в том, какая ситуация Вы, как предполагается, используете различные идентификаторы?

Кто-либо может разъясниться или связаться с местом, где это?

50
задан BoltClock 21 October 2011 в 01:47
поделиться

1 ответ

Хорошо, я считаю, что это работает следующим образом:

Используя 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 для разных типов ячеек, где вид означает класс. Если вы используете только стандартные ячейки, вам, вероятно, понадобится только один reuseIdentifier.

Этот шаблон проектирования известен как объединение объектов .

66
ответ дан 7 November 2019 в 11:01
поделиться