2010-08-22 6 views
1

A partir d'un related thread, comment aurais-je pu savoir que le "mailString" ci-dessous était déjà autoeleased?Pourquoi cette autorelease mailString serait-elle redondante?

// 
+ (void) sendEmail:(NSString *) subject withBody:(NSString *)body { 
NSString *mailString = [NSString stringWithFormat:@"mailto:[email protected]&subject=%@&body=%@", 
     [subject stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding], 
     [body stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]]; 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:mailString]]; 
[mailString autorelease]; 
} 

Répondre

5

stringWithFormat: est une fonction de commodité qui renvoie un objet autoreleased.

Je ne peux pas recomment le Memory Management Guide assez fortement. Il vraiment mérite d'être lu, probablement plus d'une fois.

2

puisque mailString n'est pas créé par [[NSString alloc] init]; idiome il doit être libéré.

0

Vous faites pas sachez que l'objet a été libéré automatiquement.

Tout ce que vous savez c'est que c'est pas votre responsabilité de le libérer. Vous savez cela parce qu'il vous a été renvoyé par une méthode dont le nom n'a pas commencé par 'alloc', 'new', ou contient 'copy', et que vous n'avez jamais appelé 'retain'.

Réitérant ce qu'Eiko a dit - lisez le Guide de gestion de mémoire d'Apples - c'est très clair sur ce sujet.