如何解决以下Sqlite代码的内存泄漏问题?

时间:2011-07-04 11:01:20

标签: iphone objective-c ios4 memory-leaks instruments

我在以下Sqlite代码中的仪器中出现内存泄漏。

NSArray *result = [self executeQuery:sql arguments:argsArray];

它调用以下方法。

- (NSArray *)executeQuery:(NSString *)sql arguments:(NSArray *)args {
sqlite3_stmt *sqlStmt;

if (![self prepareSql:sql inStatament:(&sqlStmt)])
    return nil;

int i = 0;
int queryParamCount = sqlite3_bind_parameter_count(sqlStmt);
while (i++ < queryParamCount)
    [self bindObject:[args objectAtIndex:(i - 1)] toColumn:i inStatament:sqlStmt];

NSMutableArray *arrayList = [[NSMutableArray alloc] init];
int columnCount = sqlite3_column_count(sqlStmt);
while ([self hasData:sqlStmt]) {
    NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
    for (i = 0; i < columnCount; ++i) {
        id columnName = [self columnName:sqlStmt columnIndex:i];
        id columnData = [self columnData:sqlStmt columnIndex:i];
        [dictionary setObject:columnData forKey:columnName];
    }
    [arrayList addObject:[dictionary autorelease]];
}

sqlite3_finalize(sqlStmt);

return arrayList;
}

我该如何解决?

1 个答案:

答案 0 :(得分:2)

我们需要查看executeQuery方法的代码 - 返回自动发布的结果,但可能不是。

你可以试试;

NSArray *result = [[self executeQuery:sql arguments:argsArray] autorelease];

但是,如果没有真正了解executeQuery详细说明的内容,我会小心翼翼地尝试这一点。

编辑:

好的,这是你的问题;

NSMutableArray *arrayList = [[NSMutableArray alloc] init];

将其创建为自动释放的数组,或者使用;

完成方法
return [arrayList autorelease];