Sto che perde la memoria qui?
-
23-09-2019 - |
Domanda
Si consideri il seguente metodo, dove costruisco una stringa e restituirlo. Desidero rilasciare i blocchi della stringa, ma la stringa è basato su valori che non esiste più. Ora che cosa?
I Am perdite di memoria e, se sì, come posso correggerlo?
- (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;
}
Al termine del metodo, la stringa di ritorno, middahStr
non è stato rilasciato. È questo un problema? Am I di memoria che perde?
Soluzione
Al contrario:. Si sono over-rilasciando
middah
si alloc e init. Poi lo si rilascia. Tutto è bene.
firstPartOfMiddah
e secondPartOfMiddah
, si chiama un metodo comodo NSString "stringWith". Ciò equivale a invocare alloc, init, e autorelease. Il tuo rilasciando loro è un errore, in quanto sono essenzialmente dati a autorelease di rilasciare entro.
middahStr
si chiama il metodo comodo, ma restituirlo. Tutto bene. Sarà rilasciato in seguito presso la piscina autorelease.
Regola generale (sono sicuro che ci sono un sacco di eccezioni):. Se non lo fai alloc esso, non rilasciarlo