утечка памяти с помощью alloc - PullRequest
0 голосов
/ 30 июля 2010

У меня есть код ниже, который вызывает утечку памяти

-(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) {
        char *fieldFlag=(char *) sqlite3_column_text(statement, 0);
        fieldFlagI=[[NSString alloc] initWithUTF8String:fieldFlag];
        //fieldFlagI=[NSString initWithUTF8String:fieldFlag];
    }
    sqlite3_finalize(statement);
}
//NSString *ffI=fieldFlagI;
//[fieldFlagI release]
return [fieldFlagI];
}

После проверки документации Apple я изменил код для возврата [autoFlease fieldFlagI];

и в сегменте кода, где я вызываю эту функцию

NSString *getRecord=[dbase getSingRecord:flag];

если я сделаю [выпуск getRecord]; - сбой приложения - как мне освободить этот объект?

Ответы [ 2 ]

1 голос
/ 30 июля 2010

Autorelease переменная fieldFlagI в методе, retain результат getRecord, чтобы завладеть им, чтобы потом можно было его освободить.Прочитайте Руководство по управлению памятью для iOS .

1 голос
/ 30 июля 2010

Если вы выполняете [fieldFlagI autorelease], тогда переменная 'getRecord' не владеет объектом, поэтому вы не можете освободить ее.

после добавления объекта в пул автоматического выпуска вы не можете освободить объект до тех пор, пока не станете владельцемобъект, добавив счет сохранения.

NSString *getRecord=[dbase getSingRecord:flag]; //object is in autorelease pool which will be released by pool
[getRecord retain] //own the object
//do some operation
[getRecord release] //then release
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...