UIlabel使用大量文本的大量内存

时间:2012-08-17 14:46:18

标签: ios uitableview uilabel

我有UITable视图,在uitable cell中我使用非常非常长的文本自己的标签。结果这uilabel花了大约100 MB。 (在这种情况下 - 内存警告然后崩溃)。我该如何解决?提前谢谢。

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    UILabel *message;
    CGSize textSize;
    CGSize fullSize = CGSizeMake(300, 100000);
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

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

    message = [[UILabel alloc] init];
    message.frame = CGRectMake(10, 30, 100, 20);
    message.font = [UIFont systemFontOfSize:12.0f];
    message.textAlignment = UITextAlignmentLeft;
    message.textColor = [UIColor whiteColor];
    message.tag = 103;
    message.numberOfLines = 100000;
    message.backgroundColor = [UIColor clearColor];
    [cell.contentView addSubview:message];
    [message release];
}
    else
{
    message = (UILabel *)[cell.contentView viewWithTag:103];
}
NSData *messageData = [[grandData objectAtIndex:indexPath.row] objectForKey:@"content"];
NSString *tempContent = [[NSString alloc] initWithData:messageData encoding:NSUTF8StringEncoding];
message.text = tempContent;   // text about 10000 symbols in length
[tempContent release];
   textSize = [message.text sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:fullSize lineBreakMode:UILineBreakModeWordWrap];
message.frame = CGRectMake(10, 30, textSize.width, textSize.height + 6);

return cell;

}

我使用消息标签(不是cell.textLabel),因为有一些标签显示其他信息(我剪掉了多余的代码)。单元格的高度根据

中的文本量动态变化
  -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

2 个答案:

答案 0 :(得分:1)

你正在泄露记忆。

创建时:

NSString *tempContent = [[NSString alloc] initWithData:messageData encoding:NSUTF8StringEncoding];

之后你没有发布tempContent

您应该将代码更改为以下内容:

NSData *messageData = [[grandData objectAtIndex:indexPath.row]
                       objectForKey:@"content"];
NSString *tempContent = [[NSString alloc] initWithData:messageData   
                                              encoding:NSUTF8StringEncoding];
message.text = tempContent;   // text about 10000 symbols in length
[tempContent release];

答案 1 :(得分:0)

我对Swift 3有同样的问题 尽管我使用了dequeueReusableCell

class StepTableViewCell: UITableViewCell {

    @IBOutlet weak var stepImageView: UIImageView!
    @IBOutlet weak var stepNumberLabel: UILabel!
    @IBOutlet weak var contentLabel: UILabel!
 }


    var fontSize = CGFloat(14)
  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    customCell = tableView.dequeueReusableCell(withIdentifier: "StepCellWithoutImage", for: indexPath) as!  StepTableViewCell


                    customCell.stepNumberLabel.text = "\(cellInfo.index + 1)"
                    customCell.contentLabel.font =  UIFont.systemFont(ofSize: fontSize)
                    customCell.contentLabel.text = step.content
                    debugPrint(step.content?.count)

                    return  customCell

}

问题实在是它试图增加字体并重新加载tableView