我在以下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;
}
我该如何解决?
答案 0 :(得分:2)
我们需要查看executeQuery
方法的代码 - 应返回自动发布的结果,但可能不是。
你可以试试;
NSArray *result = [[self executeQuery:sql arguments:argsArray] autorelease];
但是,如果没有真正了解executeQuery
详细说明的内容,我会小心翼翼地尝试这一点。
编辑:
好的,这是你的问题;
NSMutableArray *arrayList = [[NSMutableArray alloc] init];
将其创建为自动释放的数组,或者使用;
完成方法return [arrayList autorelease];