首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlite3 NSDictionary内存泄漏

sqlite3 NSDictionary内存泄漏
EN

Stack Overflow用户
提问于 2012-04-30 21:50:12
回答 1查看 182关注 0票数 0

我的sqlite执行查询代码如下所示。Instruments捕获NSDictionary alloc和release行(在while循环内)中的内存泄漏。有人能指出这些分配/释放中的错误在哪里吗?

代码语言:javascript
复制
- (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 ;
}

任何帮助/指针都是非常感谢的。几天来一直在为此而苦苦挣扎。

EN

回答 1

Stack Overflow用户

发布于 2012-04-30 22:18:36

如果您没有使用ARC,那么我建议您将返回线更改为:

代码语言:javascript
复制
return [arrayList autorelease];

否则,您可能会泄漏完整的arrayList。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10384810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档