Ios sqlite3 NSDictionary内存泄漏
我的sqlite执行查询代码如下。Instruments在NSC和释放线路(while循环内)中捕获内存泄漏。有人能指出这些alloc/release中的错误吗Ios sqlite3 NSDictionary内存泄漏,ios,sqlite,nsdictionary,Ios,Sqlite,Nsdictionary,我的sqlite执行查询代码如下。Instruments在NSC和释放线路(while循环内)中捕获内存泄漏。有人能指出这些alloc/release中的错误吗 - (NSMutableArray *)executeQuery:(NSString *)sql arguments:(NSArray *)args { sqlite3_stmt *sqlStmt; if (![self prepareSql:sql inStatament:(&sqlStmt)])
- (NSMutableArray *)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]; // instrument marks leak 0.1 % on this line
NSUInteger rcnt= arrayList.retainCount;
int columnCount = sqlite3_column_count(sqlStmt);
while ([self hasData:sqlStmt]) {
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; // instrument marks leak 13% on this line
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];
[dictionary release];// instrument marks leak 86.9 % on this line
}
sqlite3_finalize(sqlStmt);
rcnt=arrayList.retainCount;
return arrayList ;
}
-(NSMutableArray*)执行任务:(NSString*)sql参数:(NSArray*)参数{
sqlite3_stmt*sqlStmt;
if(![self-prepareSql:sql inStatament:(&sqlStmt)])
返回零;
int i=0;
int queryParamCount=sqlite3\u bind\u parameter\u count(sqlStmt);
while(i++
非常感谢您的帮助/指点。我已经为此挣扎了几天 如果您不使用ARC,我建议您更改您的返回线:
return [arrayList autorelease];
否则,您可能会泄漏完整的arrayList。感谢您的快速响应。当我在arraylist上尝试自动释放时,程序崩溃,出现“MessageSent to deallocated instance”。这是否意味着我将在其他地方释放arrayList?可能意味着您在executeQuery:arguments之外没有保留/释放属性:请检查您是否保留了函数返回的数组,以及完成后是否释放了该数组。自动返回返回值是函数中的正确操作。因此,错误可能超出所示功能范围。