gpt4 book ai didi

ios - FMResultSet 中的内存泄漏 - FMDB

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:25 25 4
gpt4 key购买 nike

我在我的项目中使用 FMDB,并且我使用 Instrument for Memory leaks 分析了我的项目。我在 FMResultSet 类的这个函数中发现了很多漏洞。泄漏是在这一行:

return [NSString stringWithUTF8String:c];

谁能给我解释一下为什么会发生这种情况并提供解决方案?因为它导致了很多泄漏实例。

这是我的代码:

//this is how i query and get result
FMResultSet *queryResult = [db executeQuery:queryString withArgumentsInArray:args];
//populate array from result set
NSMutableArray *resultArray = [self populateFromDB:queryResult];


//code of populateFromDB method
- (NSMutableArray*)populateFromDB:(FMResultSet*)queryResult
{
NSMutableArray *resultArray = [[[NSMutableArray alloc]init] autorelease];
while ([queryResult next])
{
//custom model class
MModel *model = [[MModel alloc] init];
model.property1 = [queryResult stringForColumn:@"column1"];
model.property2 = [queryResult stringForColumn:@"column2"];

[resultArray addObject:model];
[model release];
}
return resultArray;
}


//init method of model class
- (id)init
{
if (self == [super init])
{
//nothing..
}
return self;
}


//dealloc method of model class
- (void)dealloc
{
[super dealloc];
}


//code of stringForColumn method of FMResultSet
- (NSString*)stringForColumn:(NSString*)columnName
{
return [self stringForColumnIndex:[self columnIndexForName:columnName]];
}


//code of stringForColumnIndex method of FMResultSet
- (NSString*)stringForColumnIndex:(int)columnIdx
{

if (sqlite3_column_type([_statement statement], columnIdx) == SQLITE_NULL || (columnIdx < 0)) {
return nil;
}

const char *c = (const char *)sqlite3_column_text([_statement statement], columnIdx);

if (!c) {
// null row.
return nil;
}
return [NSString stringWithUTF8String:c];
}

如有任何帮助,我们将不胜感激。提前致谢

最佳答案

根据SQLLite docs :

The memory space used to hold strings and BLOBs is freed automatically.

从 Instruments 的角度来看,可能是 C 字符串 c 泄漏了,因为 SQLLite 正在不透明地管理该字符串的内存。您可以通过检查泄漏对象的类型来确认这一点。 (它是 malloc 吗?还是某种 CFString 对象?)

关于ios - FMResultSet 中的内存泄漏 - FMDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16456063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com