2009-03-02 8 views
13

Ich habe das Verfahren folgendeWenn ein NSString in iPhone veröffentlichen

-(NSMutableArray *) getPaises { 
    NSMutableArray * paises; 
    paises = [[NSMutableArray alloc] init]; 
    while(get new row) { 
     NSString *aPais = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 
     [paises addObject:aPais]; 
    } 
    return paises; 
    } 

Ich bin nicht die aPais Freigabe, denn wenn ich es die Anwendung abstürzt tun. Ich weiß nicht wann oder ob ich es irgendwo nach der Benutzung veröffentlichen soll und wenn ja, wie mache ich es. Geben Sie einfach das NSMutableArray ist genug? Oder muss ich es durchqueren und jedes Objekt freilassen?

Und wenn ich es nicht freigeben muss, wer ist verantwortlich für die Freigabe?

+0

Ein Hinweis zur Methodenbenennung: In Cocoa gibt eine Methode namens "getFoo" foo als Referenz zurück: - (void) getFoo: (out NSMutableArray **) outArray. Um mit den Namenskonventionen von Cocoa konsistent zu sein, sollten Sie Ihre Methode einfach "paises" nennen. –

Antwort

16

Wie epatel sagte, müssen Sie diese bestimmte Zeichenfolge nicht freigeben. Wenn Sie mehr proaktive wollten, könnten Sie diese stattdessen tun:

-(NSMutableArray *) getPaises { 
    NSMutableArray * paises; 
    paises = [[[NSMutableArray alloc] init] autorelease]; 
    while(get new row) { 
     NSString *aPais = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 
     [paises addObject:aPais]; 
     [aPais release]; 
    } 
    return paises; 
} 

Zusammengefasst:

  • [[NSString alloc] initWith ...] -> Sie müssen loslassen oder Autorelease.

  • [NSString stringWith ...] -> Keine Freigabe erforderlich.

- Edit: autorelease für paises hinzugefügt, wie Sie es zurückkehren. Wenn Sie ein Objekt zurückgeben, geben Sie es immer automatisch frei, wenn Sie es zugewiesen haben: &.

+0

Vielen Dank. Ich gebe das NSMutableArray manuell frei, aber die Autorelease ist eine bessere Option. Ich werde es ändern. – madelman

5

stringWithUTF8String: gibt eine Autorelease-Zeichenfolge zurück, die von Cocoa automatisch in der nächsten Eventloop freigegeben wird. Aber die Zeichenfolge bleibt auch im Array erhalten, wenn Sie ... tun, so lange wie es im Array ist, wird es beibehalten.

Verwandte Themen