什么是细胞标识符有用?

时间:2010-01-25 21:25:40

标签: iphone uitableview

我想知道为什么我需要UITableView中的Cell Identifier ......就像这样:

static NSString *cellIdentifier = @"Cell";

需要什么?实施例

3 个答案:

答案 0 :(得分:8)

UITableView需要能够平滑快速地显示快速变化的数据,有时单元格还有其他代码来构建单元本身,使用Core Graphics等。

UITableView一次只能显示少量单元格,而数据源中可能包含更多“行”。为了减少处理和内存使用,apple提供了dequeueReusableCellWithIdentifier方法。这允许tableview重新使用已经从视图中删除的已实例化的单元格(如果可用)。

UITableView可以包含不同类型的单元格。例如,您可能有一个tableview,其中某些行具有关联的图像,而其他行则没有,具有不同的单元格布局。或者根据其他一些上游应用程序设置,您有不同的单元格类型。 CellIdentifier 告诉dequeue方法您要重用哪种类型的单元格,因此您不会收到错误类型的单元格。

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

如果找不到要重复使用的单元格,则必须创建它,即:

if(cell == nil) ....

由于许多应用程序仅对给定的tableview使用单一类型的单元格而产生混淆,因此CellIdentifier不会更改。

来自Apple的一篇好文章: https://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/TableViewCells/TableViewCells.html

另见: Use two different cell identifier on same table view

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

答案 1 :(得分:3)

它用作缓存单元格的键,例如:

- (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];
   ...

然后另一个表可能使用不同的标识符......

答案 2 :(得分:1)

如果您需要重复使用单元来节省应用程序内存,那么单元标识符就很好。例如,如果应用程序中有许多单元格,而不是在用户滚过它时释放单元格,则只需修改单元格以包含您正在创建的新单元格的信息。这节省了空间,因为如果用户一次只看10个,则不需要分配数千个单元。标识符是系统用于检查是否存在具有该标识符的单元的标识符。如果有,它会使用它们。否则,它必须分配新空间并创建新对象。