2010-11-28 15 views
0

Ich habe NSMutableArray * cityData, das ich mit benutzerdefinierten LocationDetail-Objekten fülle. cityData wird in viewDidLoad erstellt und in dealloc freigegeben. Irgendwo im Code, basierend auf Benutzeraktionen, besiedeln ich LocationDetail und fügen Sie Citydata Array:Speicherverwaltungsproblem mit NSString

LocationDetail* d = [[LocationDetail alloc] init]; 
    d.city = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 1)]; 
    d.tz = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 3)]; 
    d.country = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 2)]; 
    d._id = [NSString stringWithFormat:@"%S", (char*)sqlite3_column_text16(statement, 0)]; 

    [cityData addObject:d]; 
    [d release]; 

Als ich mit dem View-Controller fertig bin, und entfernen Sie es, das unbeabsichtigte Austreten Dienstprogramm sagt, dass ich ein Leck im Code haben oben in NSCFString in allen 4 Zeilen mit [NSString stringWithFormat] oben.

versuchte ich die sqlite3 Sachen zu entfernen und um den Anruf zu so etwas wie

d._id = [NSString stringWithFormat:@"%s", "a string"] 

mit dem gleichen Ergebnis vereinfachte. Wenn ich jedoch den NSString stringWithFormat wie folgt ersetze:

das Leck geht weg. Ich frage mich, warum es ein Leck gibt, wenn ich das stringWithFormat benutze, aber nicht wenn ich @ "etwas" verwende. Ist etwas offensichtlich, dass ich falsch mache?

Danke!

+0

Zeigen Sie, wie Sie jede '@ Eigenschaft' ('city',' tz', 'country' und' _id') für 'LocationDetail' definiert haben. –

+0

Die Eigenschaften von LocationDetail sind alle NSStrings * und definiert seinen Weg: @property (nicht atomisch, retain) NSString * _id; – MirekE

+0

@interface LocationDetail: NSObject { NSString * city; NSString * tz; NSString * Land; \t NSString * _id; } @Eigenschaft (nicht atomar, behalten) NSString * Stadt; @Eigenschaft (nicht atomisch, behalten) NSString * tz; @Eigenschaft (nicht atomisch, behalten) NSString * Land; @property (nicht atomisch, beibehalten) NSString * _id; @end – MirekE

Antwort

1

Eigenschaften nicht automatisch für Sie freigegeben werden, müssen Sie das selbst in

- (void)dealloc 

The Objective-C Programming Language: Declared Properties Siehe als Beispiel tun.


Edit:

Es scheint, dass das Beispiel in die Advanced Memory Management Programming Guide verschoben wurde.

+0

Ja, das habe ich verpasst. Vielen Dank! – MirekE

+0

Leider ist dieser Link jetzt unterbrochen. – Ant

+0

Danke für die Nachricht, ich habe den Beitrag mit einem aktuelleren Link aktualisiert. –