3

UITableviewがスクロールされるたびに、48バイトのメモリリークが発生します。責任のあるライブラリ:libsystem_c.dylib責任のあるフレーム:strdup。

これはiOS5.1でのみ観察され、以前のバージョンでは観察されません。他の誰かが同じに直面しましたか?これはiOS5.1のバグですか?

コード:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath(NSIndexPath *)indexPath 
{
    NSString *cellIdentifier = [[NSString alloc] initWithString:@"fontSelectionCell"];

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    [cellIdentifier release];

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

    cell.textLabel.text = [fontNameList objectAtIndex:[indexPath row]];
    cell.selectionStyle =UITableViewCellSelectionStyleGray;
    cell.textLabel.font = [UIFont systemFontOfSize:17.0];

    if ([fontName isEqualToString:cell.textLabel.text])
    {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
        cell.textLabel.textColor = [UIColor blueColor];

    }
    else
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.textLabel.textColor = [UIColor blackColor]; 
    }

    return cell;
}
4

2 に答える 2

1

セル識別子の処理方法が原因である可能性があります。cellIndentifier解放した後、新しいセルを作成するときに参照するため(つまり、セルがから再利用のために戻されなかった場合)、クラッシュしないことに実際は驚いていますdequeueReusableCellWithIdentifier

セル識別子を使用する標準/承認された方法は、静的を使用することです(変更されることはなくcellForRowAtIndexPath、テーブルのスクロール時に常に呼び出されるため、割り当てられるのは1回だけで、数百回になる可能性はないため)。これにより、コードがはるかに効率的になります。

すなわち

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{    
    static NSString *cellIdentifier = @"fontSelectionCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
    }   

   ...
}

変更cellIdentifierしてみて、それでもリークが発生するかどうかを確認してください。

于 2012-04-18T09:14:04.423 に答える
0

iOS5.1ですでに報告されているこの問題が発生していると思います。私もそれを持っています。現時点では、この問題に関するアップルのフォーラムでリンクを見つけることができませんでした。

于 2012-04-18T13:06:43.487 に答える