2009-03-05 5 views
0

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

を私は、私は、「エラー:NSAutoReleasePool.h:そのようなファイルやディレクトリはありません」を取得

#import "NSAutoreleasePool.h" 

を見つけることができません。このメモリリークの修正や、nibsからテーブルセルを割り当てる正しい方法はありますか?ここで

は、私は現在、それをやっている方法は次のとおりです。

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

}

MEMリークがあるだろう、なぜ私はので、ここではallocが表示されませんか?

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

答えて

1

プロパティ宣言のために、あなたのcellNameプロパティの設定されたセッターに渡されたオブジェクトが保持されます。

deallocメソッドでcellNameにリリースメッセージを送信する必要があります。

さらに、cellViewが要求されるたびにペン先をロードする必要はありません。 cellName!= nilかどうかをチェックして返すか、cellViewのreuseIdentifierをdequeueReusableCellWithIdentifierで見つけられるように設定します。

1

実際には、テーブルビューセルにNIBを使用している場合(通常は何かをしない限りは必要ありません)、再利用可能なテーブルにヒットしないたびにロードする必要がありますビューセル。私は、次のコードは、ビットクリーンに見えると思う:

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

objectAtIndex:セルがNIB(ゼロオブジェクトがファイルの所有者である)の最初のオブジェクトである場合は1つのトリックは動作します。テーブルビューセルを行うため

いくつかの注意:

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

#1の場合、プロパティ属性には「非原子的」しか含まれませんか? #3の場合、セルはどこでオートレリースされていますか?dealloc - それはあなたが正しいことを意味するものではありませんか? – 4thSpace

+0

私はコメントで詳述できません(短すぎます)。目的のCメモリ管理用紙を読む必要があるようです。参照カウントを確実に把握し、保持、解放、および解放を確実に行うようにしてください。オートリリースのセクションもあります。私が助けることができるなら、私に[email protected]でメールを送ってください。 –

関連する問題