【问题标题】:Why we use the cellIdentifier?为什么我们使用 cellIdentifier?
【发布时间】:2011-12-08 07:47:06
【问题描述】:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier  ];
    if(cell == nil){
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.text = [[views objectAtIndex:indexPath.row] objectForKey:@"title"];
    return cell;
}

为什么我们在这里使用 CellIdentifier,为什么它是静态的?

【问题讨论】:

    标签: iphone ios uitableview static identifier


    【解决方案1】:

    这个想法是表格视图在使用后不一定会破坏单元格,但可以回收它以提高性能。该标识符用于获取正确的缓存单元格,而不是另一个表视图。例如,如果您一直需要两种不同的单元格类型,您甚至可以为同一个表格视图使用多个标识符。

    想象有一个由标签和图像视图组成的单元格。初始化单元格时,需要创建单元格视图,需要创建标签,需要创建图像视图。现在该类型的每个单元格看起来都一样,它们只是内容不同。因此,有时会返回一个未使用的单元格,而不是每次都重新进行此设置,而您只需填写新内容。

    【讨论】:

    • 在哪种情况下这个 if 单元格将为 nil if(cell == nil){ cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; }
    • 您先致电[tableView dequeueReusableCellWithIdentifier:CellIdentifier];。如果 table view 仍然有一个未使用的单元格,它可以给你,你需要做的就是配置它。但如果它没有一个(例如因为表格要求您第一次生成一个单元格),那么您需要创建它。
    【解决方案2】:

    静态变量将只构造一次,并且在调用 cellforrowatindexpath 方法时始终避免创建内存。它的生命周期将存在于该文件中,因为它是局部变量,而对于全局静态,它的生命周期将存在于整个文件中应用程序

    【讨论】:

      【解决方案3】:

      CellIdentifier 是一种标记tableViewCells 的方法。这样uitableView 可以知道在需要重用时取出哪个uitableviewcell

      【讨论】:

        【解决方案4】:

        previous question 已经解释了细胞回收。静态变量对于特定的 .m 文件是“全局的”,它们在类的所有实例之间共享。这是有道理的,因为这个字符串只是一个标识符——为类的每个实例使用相同字符串的单独实例将是一种浪费。

        【讨论】:

          【解决方案5】:

          当您尝试通过出列来重用一个单元格时,您可以使用一个单元格标识符(如标签)来标识该单元格。

          它是静态的,因为这样你只定义一次,但它在该方法内的类的所有对象之间共享。

          【讨论】:

            猜你喜欢
            • 2020-11-11
            • 2011-04-02
            • 1970-01-01
            • 1970-01-01
            • 2016-05-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多