0

UICachedDeviceWhiteColor を表示するメモリ リークがあります。私はどこでも UICachedDeviceWhiteColor を使用していません。それを検索すると、これは iPhone-SDK のバグであると言う人が見つかります。このブログ エントリを見つけました: http://piezoelectrics.blogspot.com/2009/02/uicacheddevicewhitecolor-leak-in-iphone.html

しかし、私は見つけることができません

#import "NSAutoreleasePool.h"  

「エラー: NSAutoReleasePool.h: そのようなファイルまたはディレクトリはありません」というメッセージが表示されます。このメモリ リークの修正、またはペン先からテーブル セルを割り当てる正しい方法はありますか?

これが私が現在行っている方法です:

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

UITableViewCell *cell = nil;    
cell = [tableView dequeueReusableCellWithIdentifier:@"CellNameIdentifier"];

if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"CellName" owner:self options:nil];
//cellName is IBOutlet to XIB's tablecell.  I reference it several times in this calss
cell = cellName; 
}

return cell;

}

ここに割り当てが表示されないのに、なぜメモリリークが発生するのでしょうか? これは問題になる可能性があります:

@property (nonatomic, retain) IBOutlet UITableViewCell *cellName;
4

2 に答える 2

1

実際、テーブル ビュー セルに NIB を使用している場合 (本当にカスタムを行っている場合を除き、通常は必要ありません)、再利用可能なテーブル ビュー セルにヒットしないたびに、NIB をロードする必要があります。次のコードは少しきれいに見えると思います。

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyID"];
if (cell == nil) {
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CellName"
                    owner:self options:nil];
    cell = [nib objectAtIndex:1];
}

objectAtIndex:1 トリックは、セルが NIB の最初のオブジェクトである場合に機能します (ゼロ オブジェクトはファイル所有者です)。

テーブル ビュー セルを実行する際の注意事項:

  • プロパティに割り当てて暗黙的に、または手動でセル オブジェクトを保持しないでください。これにより、セル メモリを解放できないため、再利用可能なテーブル セル機能が正しく動作しなくなります。
  • NIB を使用している場合、コードではできないため、インターフェイス ビルダーでセル再利用識別子を設定することを忘れないでください。
  • セルが自動解放されていることを常に確認してください。手動で行うか、(objectAtIndex: メソッドが行うように) 自動解放されたメモリを返す cocoa 関数を使用していることを確認してください。
于 2009-03-05T21:05:44.383 に答える