Для чего нужен идентификатор ячейки? - PullRequest
3 голосов
/ 26 января 2010

Интересно, зачем мне идентификатор ячейки в UITableView ... вот так:

static NSString *cellIdentifier = @"Cell";

для чего это нужно? Пример?

Ответы [ 3 ]

8 голосов
/ 09 мая 2012

UITableView должен иметь возможность плавно и быстро отображать быстро меняющиеся данные, а иногда в ячейках есть дополнительный код для построения самой ячейки с использованием Core Graphics и т. П.

UITableView может отображать только небольшое количество ячеек одновременно, в то время как в источнике данных может быть гораздо больше «строк». Чтобы сократить объем обработки и использования памяти, Apple предоставила метод dequeueReusableCellWithIdentifier. Это позволяет табличному представлению повторно использовать уже созданную ячейку, которая упала из представления, если она доступна.

UITableView может содержать различные типы ячеек. Например, у вас может быть табличное представление, в котором некоторые строки имеют ассоциированное изображение, а другие - нет, с разными макетами ячеек. Или у вас есть разные типы ячеек, в зависимости от других настроек восходящего приложения. CellIdentifier сообщает методу удаления из очереди, какой тип ячейки вы хотите использовать повторно, поэтому вы не получите неправильный тип ячейки.

static NSString *CellIdentifier = @"Cell with image";
UITableViewCell *cell = [tv dequeueReusableCellWithIdentifier:CellIdentifier];

Если не удается найти ячейку для повторного использования, ее необходимо создать, например:

if(cell == nil) ....

Путаница возникает, так как многие приложения используют только один тип ячейки для данного табличного представления, поэтому CellIdentifier не изменяется.

Theres хорошая рецензия от Apple по адресу: https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html

Смотри также: Использовать два разных идентификатора ячейки в одном и том же табличном представлении

и: http://www.digitalhobbit.com/2009/12/19/a-useful-uitableview-cell-creation-pattern/

3 голосов
/ 26 января 2010

Используется в качестве ключа для кэширования ячеек, например:

- (UITableViewCell *)tableView:(UITableView *)tableView_ cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString * CellIdentifier    = @"MyCell1";
    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
   ...

Тогда другая таблица может использовать другой идентификатор ...

1 голос
/ 26 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...