2011-07-04 73 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