Supposons que j'ai une variable qui a déjà été initialisée à une chaîne via une combinaison alloc/init. Aurai-je des fuites de mémoire si je le réaffecte via le traitement, c'est-à-dire.Y a-t-il une fuite de mémoire lors de la réaffectation d'une variable?
NSString *s = [[NSString alloc] initWithString:someOtherStringVariable];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Y a-t-il eu des fuites de mémoire ici? Si oui, ai-je besoin de créer une autre variable (par exemple, s2), faire cette affectation, puis libérer l'original?
NSString *s = [[NSString alloc] initWithString:someOtherStringVariable];
NSString *s2 = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[s release];
Maintenant, que se passe-t-il si l'autre chaîne est une constante, comme @ "Une autre chaîne". Aurais-je besoin de m'inquiéter des fuites? c'est à dire.
NSString *s = [[NSString alloc] initWithString:@"Some other string"];
s = [s stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
Merci
Merci. L'exemple était notionnel comme vous le signalez. Je pensais avoir lu quelque part qu'il y avait de la mémoire allouée à la chaîne littérale dans tous les cas, donc elle ne serait jamais libérée. Donc il faut retenir que le compte n'était pas pertinent. – farhadf
Il est vrai que vous n'avez pas besoin de libérer/gérer manuellement les littéraux de chaîne. Cependant, dans votre code, vous n'attribuez pas de chaîne littérale directement, mais faites plutôt [NSString alloc] avant. Dès que vous avez un alloc, vous avez besoin d'une version (automatique). Cela ne fuira pas: NSString * s = @ "Some string"; s = [...]; –
J'ai compris. Merci. – farhadf