Question

Considérez la méthode suivante, où je construis une chaîne et de le retourner. Je voudrais libérer les blocs de construction de la chaîne, mais la chaîne est basée sur des valeurs qui n'existe plus. Maintenant quoi?

Suis-je une fuite de mémoire et si oui, comment puis-je corriger?

- (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;

}

A la fin de la méthode, la chaîne de retour, middahStr n'a pas été publié. Est-ce un problème? Suis-je une fuite de mémoire?

Était-ce utile?

La solution

Bien au contraire. Vous êtes sur libération

middah vous alloc et init. Ensuite, vous relâchez. Tout est bien.

firstPartOfMiddah et secondPartOfMiddah, vous appelez une méthode pratique NSString "stringWith". Cela équivaut à invoquer alloc, init, et autorelease. Votre leur libération est une erreur, car ils sont essentiellement donnés à AutoRelease pour libérer plus tard.

middahStr vous appelez la méthode pratique, mais le retourner. Tout est bien. Il sera publié plus tard par la piscine autorelease.

Règle de base (je suis sûr qu'il ya beaucoup d'exceptions). Si vous n'alloc pas, ne relâchez pas

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top