【问题标题】:Much memory usage in UITableViewUITableView 中的内存使用量很大
【发布时间】:2014-04-06 00:00:24
【问题描述】:

我有一个UITableViewController,我自定义了它的UITableViewCells。每个UITableViewCell 包含两个UIImageViews 和两个UILabels。虽然当我进入UITableView 时,内存使用量增加到 100 MB,但我不知道原因。这是处理单元格自定义的cellForRowAtIndexPath 方法的代码。谁能帮我解决这个问题?

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

    static NSString *simpleTableIdentifier = @"Cell";

    UITableViewCell *cell = 
      [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

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

    UILabel *mnhmeioLabel = (UILabel *)[cell viewWithTag:102]; 
    mnhmeioLabel.frame = CGRectMake(mnhmeioLabel.frame.origin.x,  
                                    mnhmeioLabel.frame.origin.y, 
                                    191, 
                                    21);

    Group *tmpGroup = [mnhmeiaTotal objectAtIndex:indexPath.row];
    NSLog(@"%@ ",tmpGroup.title);    
    NSLog(@"%f %f", mnhmeioLabel.bounds.size.width, 
                    mnhmeioLabel.bounds.size.height);

    mnhmeioLabel.text = tmpGroup.title;
    mnhmeioLabel.font = [UIFont fontWithName:@"Open Sans" size:10];    
    mnhmeioLabel.numberOfLines=0;
    mnhmeioLabel.lineBreakMode=NSLineBreakByWordWrapping;    
    [mnhmeioLabel sizeToFit];   

    if( tmpGroup.imagesOfArticle.count > 0 ){
        UIImageView *mnhmeioImageView = (UIImageView *)[cell viewWithTag:103];
        mnhmeioImageView.image = [tmpGroup.imagesOfArticle objectAtIndex:0];
    } else {
        UIImageView *mnhmeioImageView = (UIImageView *)[cell viewWithTag:103];
        mnhmeioImageView.image = [UIImage imageNamed:@""];
    }    

    UIImageView *markerImageView=(UIImageView *)[cell viewWithTag:100];
    markerImageView.image=[self selectMarker:tmpGroup];

    UILabel *mnhmeioDescription = (UILabel *)[cell viewWithTag:101];
    mnhmeioDescription.text=tmpGroup.constructedContent;

    mnhmeioDescription.font = [UIFont fontWithName:@"Open Sans" size:6];    
}

【问题讨论】:

  • 也许是图片?图像可以快速使用大量内存.. 只需计算宽度height位深度...
  • 您可以将[UIImage imageNamed:@""] 替换为nil。否则,您将创建一个空对象。您还创建了几个字体对象(每个单元格两个新对象)。只需使用静态对象。
  • 可以创建自定义 UITableCell appcoda.com/customize-table-view-cells-for-uitableview
  • 另外,如果你的图片尺寸比你的 mnhmeioImageView 尺寸大很多,你应该调整你的图片尺寸。
  • 什么“种类”的内存可以增长到 100MB?您应该只注意“所有堆分配”。

标签: ios objective-c memory-management uitableview


【解决方案1】:

可能图片很大。

或者,也许您没有正确重用单元格,如果您使用的是 iOS7 和 Storyboards,请按照本教程(原型单元格和使用单元格子类部分): http://www.raywenderlich.com/50308/storyboards-tutorial-in-ios-7-part-1

【讨论】:

  • 单元格的重用是正确的。关于图像的大小,他什么也没告诉我们。但我认为图像不是太大。
【解决方案2】:

感谢大家的帮助。我不得不尽可能地减小每个图像的大小。这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2018-02-21
    • 2018-04-18
    • 2017-08-08
    • 2021-11-16
    相关资源
    最近更新 更多