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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top