Pregunta

Considere el siguiente método, donde construyo una cadena y lo devuelve. Me gustaría liberar los componentes básicos de la cadena, pero entonces la cadena se basa en valores que ya no existe. ¿Ahora que?

¿Estoy perdiendo memoria y si es así, ¿cómo puedo corregirlo?

- (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 final del método, la cadena devuelta, middahStr no ha sido puesto en libertad. ¿Es esto un problema? Am I memoria fugas?

¿Fue útil?

Solución

Todo lo contrario:. Usted tiene más liberadora

middah alloc e init. A continuación, suelte. Todo está bien.

firstPartOfMiddah y secondPartOfMiddah, se llama a un método de conveniencia NSString "stringWith". Esto es equivalente a invocar alloc, init, y autorelease. Tu ellos de liberación es un error, ya que se dan esencialmente a AutoRelease para liberar más tarde.

middahStr se llama al método de conveniencia, sino devolverlo. Todo está bien. Se dará a conocer más adelante en la piscina autorelease.

La regla de oro (estoy seguro de que hay un montón de excepciones):. Si no lo hace alloc ella, no lo suelte

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top