Причина утечки памяти в alloc, как освободить переменную до того, как функция ее вернет - PullRequest
0 голосов
/ 17 сентября 2011
-(NSString *) getSingRecord: (NSString *) getStatement{

    NSString *sql=getStatement;

    sqlite3_stmt *statement;

    NSString *fieldFlagI=@"0";

    if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) {
        //while (sqlite3_step(statement) == SQLITE_ROW) {
        if(sqlite3_step(statement) == SQLITE_ROW) {
            char *fieldFlag=(char *) sqlite3_column_text(statement, 0);
            fieldFlagI=[[NSString alloc] initWithUTF8String:fieldFlag];
        }
        sqlite3_finalize(statement);
        statement=nil;
    }
    return fieldFlagI;
}

У fieldFlagI есть утечка памяти, потому что я использую alloc, как мне освободить ее перед возвратом в функцию?

Ответы [ 4 ]

4 голосов
/ 17 сентября 2011

Просто используйте

fieldFlagI=[NSString stringWithFormat:@"%s",fieldFlag];

Таким образом, вы не звоните alloc и вам не нужно звонить release

2 голосов
/ 17 сентября 2011

Добавить авто-релиз:

fieldFlagI=[[[NSString alloc] initWithUTF8String:fieldFlag] autorelease];

И обязательно прочитайте руководство по программированию управления памятью от Apple или хотя бы несколько учебных пособий по управлению памятью объективного C.

0 голосов
/ 09 января 2014

Используйте stringWithUTF8String.Этот метод вернет объект autorelease.

0 голосов
/ 17 сентября 2011

Вам просто нужно autorelease это.

...