2011-07-04 75 views
0

我在下面的Sqlite代码中的仪器中发现内存泄漏。如何解决下面的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; 
} 

我该如何解决它?

回答

2

我们需要看到您的executeQuery方法的代码 - 它应该返回一个自动发布的结果,但它可能不是。

你可以试试;

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

但我很警惕的只是一味地想,如果没有实际看到什么executeQuery做详细介绍。

编辑:

好的,这是你的问题;

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

将其创建为自动发布的数组,或者完成该方法;

return [arrayList autorelease]; 
+0

编辑我的问题。为'executeQuery'细节。 – Devang

+0

查看更新的答案。显然,这可能会产生影响,具体取决于其余代码如何使用executeQuery结果,但如果您与内存管理一致,则无问题。 – Roger