UItableviewcell“cell-identifier”内存管理

时间:2012-05-04 10:10:02

标签: ios iphone uitableview

如果我们为所有单元格提供相同的标识符,则消失单元格将使用“显示单元格”的内存。滚动表格视图时意味着内容将重复。但是如果我们给出diff标识符,那么每个单元都将拥有自己的内存位置并完美地显示数据。

现在假设我在表视图中加载了1000条或更多条记录。如果我将提供不同的标识符,内存中将有大量的分配。那么有没有任何解决方案能够以最少的内存分配显示数据?

以下是我定义单元格标识符的方法:

-(UITableViewCell *)tableView:(UITableView *)tableView 
        cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellIdentifier = [NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row];
    UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (Cell == nil) 
    {
        Cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                      reuseIdentifier:cellIdentifier];
    }
}

2 个答案:

答案 0 :(得分:2)

您遇到的问题是由于您不正确地使用单元格标识符造成的。对于要重用的所有单元,单元标识符应该相同。看看这个模板,它应该解释正确的方法:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *cellIdentifier = @"MY_CELL";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
        // everything that is similar in all cells should be defined here
        // like background colors, label colors, indentation etc.
    }
    // everything that is row specific should go here
    // like label text, progress view progress etc.
    return cell;
}

顺便说一下。使用camel case命名变量,大写名称用于类名。

答案 1 :(得分:1)

你应该清除出列单元格的内容,如清空标签和其他标签。如果为每个单元分配单独的内存,则很容易降低内存。完美的内存管理仍在重复使用单元格。