UiTableView加载了许多单元格和MemoryWarning

时间:2013-02-26 09:00:13

标签: iphone ios

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

    PostCount *post=[listArr objectAtIndex:indexPath.row];

    //NSString *CellIdentifier = [NSString stringWithFormat: @"Cell%d_%d_%@_%d",indexPath.section,indexPath.row,post.foreignId,[listArr count]];
    NSString *CellIdentifier = [NSString stringWithFormat: @"Cell_%d_%@",indexPath.row,post.foreignId];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        NSLog(@"indexPath.row++++++++=%d",indexPath.row);

        TimeLineGraphicView *gview=[[TimeLineGraphicView alloc]init];
        gview.tag=indexPath.row+1000;
        gview.delegate=self;

        [cell addSubview:gview];

        int Allheight =[ModelClass returnGraphicViewHeight_timeLine:post];
        gview.frame=CGRectMake(0, 0, 320, Allheight);
        [gview setViewStyle:post];
    }

    TimeLineGraphicView *gview=(TimeLineGraphicView *)[cell viewWithTag:indexPath.row+1000];
    gview.lab_time.text=[ModelClass intervalSinceNow:post.when btime:0];

    //NSLog(@"intervalSinceNow=%@  ",[ModelClass intervalSinceNow:post.when btime:0]);
    //NSLog(@"post.when=%@  gview=%@  gview.lab_time.text=%@",post.when,gview, gview.lab_time.text);   

    return cell;

}

你好,如果我使用上面的代码,如果我有很多单元格,TimeLineGraphicView * gview = [[TimeLineGraphicView alloc] init]可以增加内存,因为当我加载很多单元格时例如首先加载15个单元格,然后添加15个单元格然后添加15个单元格等等,它给我didReceiveMemoryWarning,可以很好地练习处理问题

2 个答案:

答案 0 :(得分:1)

您不释放单元格

 cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

您不会发布视图

[cell addSubview:gview];
[gview release];

答案 1 :(得分:1)

你实施这些事情的方式不对。

  • 为什么不将UITableViewCell子类化?让我们说,为什么不是“TimelineGraphicTableviewCell”?
  • 可以在那里将“TimeLineGraphicView”作为子视图添加到单元格的contentView中。
  • 在自定义类的layoutSubviews中设置subView的框架等。
  • – cellForRowAtIndexPath:中,您可以创建并设置数据。!

我认为如果你以正确的方式实现事情,tableview不应该显示任何内存警告,无论有多少行..!

如果您仍然不清楚自定义tableViewCells,只需谷歌它,你会发现大量的教程。

祝你好运..!