1

UITableビューがあり、適切なセルで、非常に長いテキストを含む独自のラベルを使用しています。その結果、このuilabelは約100mbを費やしました。(この場合-メモリ警告とその後のクラッシュ)。どうすれば修正できますか?前もって感謝します。

  - (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
4

2 に答える 2

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];
于 2012-08-17T15:03:32.303 に答える