私はiOSアプリでメモリリークを追跡していると私はリーク機器を使用して、次のコードに帰ってくる:のiOS - FMDB使用量とメモリ
NSMutableArray *resultSet = [[NSMutableArray alloc] initWithCapacity:3];
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
FMResultSet *rs = [db executeQuery:query,equipmentID];
while ([rs next])
{
[resultSet addObject: [rs resultDict]];
}
[rs close];
[innerPool release];
return [resultSet autorelease];
これは正しいです(メモリの観点から管理)のFMDBの使用?
リークの詳細なスクリーンショット:ここで漏れ器具のスクリーンショットである
おかげデイブが、はい、私は上保持リターン配列をしています。各項目は、UITableViewセルのサブクラスによって(合成されたセッターを介して)保持されます。これらは再利用可能なキューにあり、キューがどのように動作するか分からないことがあります。 [詳細](https://lh6.googleusercontent.com/-ZbnV40_WTrg/TjhOQKjBB4I/AAAAAAAAMtU/1tIUgWIT_MM/s800/leak2.jpg)リークのスクリーンショットを見ると、BaseCellのsetDataメソッドだけがリリースされていません。ベースセルのdeallocに[data release]を追加するとクラッシュします。それがセッターを介して明確に保持されるように見えるとき、これがなぜクラッシュするのかについてのアイデアはありますか? – Crake
喫煙銃は次のようになった。 'while([rs next]) { result = [rs resultDict]; } '....これは、セルがデータを保存した後に呼び出されていました。このような直接の割り当ては悪い考えです。私は' while([rs next])に変更しました。 { result = [rs resultDict]コピー]; } ' – Crake
最初に私は辞書のコピーについてCrakeに同意しましたが、fmdbが既に 'copy'を呼び出しているので、これは必要ではありません。 –