私は最近、sqlite3 データベースを使用する大規模なプロジェクトを継承しましたが、現在、全体に散在する大量のメモリ リークに対処しています。いくつかのリークは、それらを解決できなかった後、私を混乱させ、意気消沈させました。メソッド内のこのループは大量のバイトをリークしますが、非常に単純に見えるため、リークを防ぐためにループを変更する方法がわかりません。
...
while ((ret=sqlite3_step(selStmt))==SQLITE_ROW)
{
GraphData *item = [GraphData alloc];
item.key = sqlite3_column_int(selStmt, 0);
item.value = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selStmt,1)];
[newData addObject:item];
[item release], item = nil;
}
...
@interface GraphData : NSObject{
NSInteger key;
NSString *value;
}
@property (nonatomic, readwrite) NSInteger key;
@property (nonatomic, retain) NSString *value;
-(id)initWithPrimaryKey:(NSInteger) xid;
-(id)initWithName:(NSString *)n key:(NSInteger)i;
@end
#import "GraphData.h"
@implementation GraphData
@synthesize key,value;
-(id)initWithPrimaryKey:(NSInteger) xid{
self.key = xid;
self.value = @"";
return self;
}
-(id)initWithName:(NSString *)n key:(NSInteger)i{
self.key = 0;
self.value = n;
return self;
}
@end
このデータソース クラス内のほとんどすべてのリークは、このループから発生しています。
これが私の経験不足が見落とした些細なことであることを願っています。
私の質問を見てくれてありがとう。