簡體   English   中英

FMResultSet中的內存泄漏 - FMDB

[英]Memory Leak in FMResultSet - FMDB

我在我的項目中使用FMDB,並使用Instrument for Memory泄漏來描述我的項目。 我在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文檔

用於保存字符串和BLOB的內存空間會自動釋放。

可能是C字符串c從Instruments的角度泄漏,因為SQLLite不透明地管理該字符串的內存。 您可以通過檢查泄漏對象的類型來確認。 (它是一個malloc?還是某種CFString對象?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM