Memory leaks while opening the sqlite database
Following methods gets called from didFinishLaunchingWithOptions,when I run on Instruments openDatabase method causing leaks.. please suggest me how to clear
- (NSString*)getdestinationPath {
NSArray *pathsArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *doumentDirectoryPath=[pathsArray objectAtIndex:0];
NSString *destinationPath=[doumentDirectoryPath stringByAppendingPathComponent:dataBaseName];
NSLog(@"database path %@",destinationPath);
return destinationPath;
}
- (void)chkAndCreateDatbase {
NSFileManager *fil开发者_运维问答eManger=[NSFileManager defaultManager];
NSError *error;
NSString *destinationPath=[self getdestinationPath];
if ([fileManger fileExistsAtPath:destinationPath]){
//NSLog(@"database localtion %@",destinationPath);
return;
}
NSString *sourcePath=[[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:dataBaseName];
[fileManger copyItemAtPath:sourcePath toPath:destinationPath error:&error];
}
- (void)openDatabase {
path=[self getdestinationPath];
if (sqlite3_open([path UTF8String], &database)==SQLITE_OK) // here leak is showing
{
NSLog(@"dataBaseOpen");
}
else {
sqlite3_close(database);
NSLog(@"dataBaseNotOpen");
}
}
You are leaking because you're not calling sqlite3_close(database)
when you get SQLITE_OK
.
if (sqlite3_open([path UTF8String], &database)==SQLITE_OK)
{
NSLog(@"dataBaseOpen");
// leak happens here, do stuff then call sqlite3_close(database), or move it out of the if/else block.
}
else {
sqlite3_close(database);
NSLog(@"dataBaseNotOpen");
}
精彩评论