1

Instruments は、このコードにメモリ リークがあることを教えてくれますが、それを見つけることができないようです....何か助けはありますか? 申し訳ありませんまたは初心者の質問。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    int altoBufferCelda = 26;
    Mensaje *msg = (Mensaje *)[model.mensajes objectAtIndex:indexPath.row];

    CGSize txtSize = [msg.texto sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(222, 222)  lineBreakMode:UILineBreakModeTailTruncation];

    [alturasDinamicas setObject:[NSNumber numberWithFloat:(txtSize.height + altoBufferCelda)] forKey:[NSNumber numberWithInt:indexPath.row]];

    return txtSize.height + altoBufferCelda;     
}
4

2 に答える 2

0

コードにメモリ リークが見られません。トーストが指摘するように、Instruments は必ずしも正確ではありません。これは主に、Apple フレームワークのコードにもメモリ リークが含まれており、Instruments でも報告されているためです。

XCode 3.2 を使用している場合は、[ビルド] メニューから [ビルドと分析] を選択して、通常はコンパイラによって検出されないエラーについてコードをスキャンできます。これにより、オブジェクトの解放を忘れたために発生する可能性のある多くのメモリ リークが示されます。

于 2009-11-07T15:29:38.427 に答える
0

私は言うだろう: [NSNumber numberWithFloat]

自動解放されたオブジェクトが割り当てられます。iPhone はガベージ コレクションではなく、参照が収集されるだけです。また、メソッドを終了する前に割り当てているメモリを解放していないため、Instruments はそれをリークとして報告しています。

これは現在受け入れられているため、回答を変更します。

楽器は神の勅令ではありません。それは間違っているかもしれません。何を確認すべきかについての強力なガイドラインとして使用してください。ただし、コードに間違いや漏れが見つからない場合は、先に進んでください。

于 2009-07-03T22:32:42.510 に答える