Bin ich ein Speicherleck hier?
-
23-09-2019 - |
Frage
Betrachten Sie die folgende Methode, wo ich ein string und gibt ihn zurück.Ich möchte, lassen Sie die Bausteine der Zeichenfolge, aber dann wird die Zeichenfolge basierend auf Werten, die nicht mehr existiert.Was nun?
Bin ich ein Speicherleck, und wenn ja, wie kann ich es korrigieren?
- (NSString) getMiddahInEnglish:(int)day{
NSArray *middah = [[NSArray alloc] initWithObjects:@"Chesed", @"Gevurah", @"Tiferes", @"Netzach", @"Hod", @"Yesod", @"Malchus"];
NSString *firstPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day% 7)-1]];
NSString *secondPartOfMiddah = [NSString stringWithFormat: @"%@", [middah objectAtIndex: ((int)day / 7)]];
NSString *middahStr = [NSString string@"%@ She'bi@%", firstPartOfMiddah, secondPartOfMiddah];
[middah release];
[firstPartOfMiddah release];
[secondPartOfMiddah release];
return middahStr;
}
Am Ende der Methode die return-string middahStr
wurde nicht veröffentlicht.Ist das ein problem?Bin ich ein Speicherleck?
Lösung
Ganz im Gegenteil:Sie sind über loslassen.
middah
Sie alloc und init.Dann sind Sie release es.Alles ist gut.
firstPartOfMiddah
und secondPartOfMiddah
, rufen Sie einen NSString "stringWith" Bequemlichkeit Methode.Dies ist äquivalent zum Aufruf alloc init, und autorelease. Ihre Freigabe ist ein Fehler, denn Sie sind im wesentlichen gegeben autorelease release später.
middahStr
rufen Sie die convenience-Methode, aber die Rückkehr.Alles ist gut.Es werden später veröffentlicht, die von der autorelease-pool.
Faustregel (ich bin sicher, es gibt genügend Ausnahmen):Wenn Sie don ' T alloc Sie nicht release es.