выделено слишком много памяти

Я пытаюсь сделать приложение, но у меня много сбоев при выделении памяти, затем я пытаюсь сократить весь код и очистить его, теперь я получаю это

Почему я получаю:

Возможная утечка объекта, выделенного в строке 101 и сохраненного в livello.

- (id) leggiLivelloDaTabella:(NSString *)tabella {

NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [documentPaths objectAtIndex:0];
NSString *databasePath = [documentsDir stringByAppendingPathComponent:@"DataBase.sqlite"];

sqlite3 *database;

Livello *livello = nil;

if (sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    // query che ricava i valori
    const char *sql =  [[NSString stringWithFormat:@"select * from Livelli WHERE Tabella = '%@'",tabella] UTF8String];

    sqlite3_stmt *selectstmt;

    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) {
        while(sqlite3_step(selectstmt) == SQLITE_ROW) {
            // ricaviamo i valori letti dalla query
            NSString *nomeTabella = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
            NSString *risposteGiuste = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
            NSString *stato = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
            NSString *risposteMinime = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];
            NSString *tentativiSbagliati = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];
            NSString *tentativiTotali = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 5)];    
            NSString *popUp = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 6)];
            NSString *idLivello = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 7)];

            livello = [[Livello alloc] initLivelloWithTabella:nomeTabella
                                                            rispGiuste:risposteGiuste
                                                          statoLivello:stato 
                                                            rispMinime:risposteMinime 
                                                    tentativiSbagliati:tentativiSbagliati
                                                          tentativiTot:tentativiTotali
                                                          disaplyPopUp:popUp
                                                                idLevel:idLivello];
        }
    }
    sqlite3_finalize(selectstmt);
    sqlite3_close(database);
    selectstmt = nil;
}
else
    sqlite3_close(database);

return  livello;

}


person francesco.venica    schedule 18.06.2012    source источник
comment
Ну вы его распределяете, куда вы его выпускаете? Вы когда-нибудь звонили [livello release]?   -  person trumpetlicks    schedule 18.06.2012


Ответы (1)


Если вы не используете ARC (автоматический подсчет ссылок), вы должны пометить livello как autorelease. Попробуйте использовать это как оператор возврата:

return [livello autorelease];

Вот еще немного информации об ARC:

http://maniacdev.com/ios-5-sdk-tutorial-and-guide/arc-automatic-reference-counting/

http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/

person Crake    schedule 18.06.2012
comment
спасибо, я не знаю, могу ли я вернуть объект и освободить его... однако я возвращаюсь к своему проекту, чтобы создать дугу, и теперь все в порядке! - person francesco.venica; 20.06.2012