2

iOSアプリでメモリリークを追跡してきましたが、リークインストルメントを使用して次のコードに戻り続けています。

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の正しい使用法ですか?リーク機器のスクリーンショットは次のとおりです。

リーク

リークの詳細なスクリーンショット:

詳細

4

2 に答える 2

1

はい、これは正しいメモリ管理です。このラインは、 (プールの排水の一部として)割り当てが解除され[rs close];たときに発生するため(まだ発生していない場合)、技術的には不要です。FMResultSetしかし、それを明示的にそこに入れることは問題ありません。

戻り配列を過剰に保持している可能性はありますか?

于 2011-08-02T17:07:43.350 に答える
0

SQLiteは、データベースが閉じられたときにのみ解放される大量のメモリを割り当てて保持します。'pragma cache_size = nnn'コマンドを発行して、割り当てるメモリの量を調整することもできます。

この関連する質問と回答を参照してください。

sqlite + fmdbバキュームコマンド後のメモリリーク(?)

于 2011-08-02T19:20:23.230 に答える