stringWithFormat vs initWithFormat sur NSString
Je me demande quelles sont les différences comme des inconvénients et/ou d'avantages il y a à déclarer une NSString de cette façon:
NSString *noInit = [NSString stringWithFormat:@"lolcatz %d", i];
par opposition à:
NSString *withInit = [[NSString alloc] initWithFormat:@"Hai %d", i];
Quelle a été la motivation de mettre stringWithFormat
au lieu d'avoir juste le initWithFormat
façon de l'initialisation de la chaîne?
Vous devez vous connecter pour publier un commentaire.
stringWithFormat:
retourne un autoreleased chaîne;initWithFormat:
retourne une chaîne de caractères qui doit être publié par l'appelant. Le premier est une "commodité" méthode qui est utile pour la courte durée de vie des chaînes, de sorte que l'appelant n'a pas à penser à appelerrelease
.+alloc
qui renvoie l'oubli de l'instance... lainit*
ne change pas le conserver count (mais c'est peut-sera, dans ce cas, le retour d'une autre instance que a été appelé).En fait je suis tombé sur ce blog entrée sur des optimisations de mémoire d'hier seulement. En cela, l'auteur donne les raisons spécifiques pour lesquelles il choisit d'utiliser
[[NSString alloc] initWithFormat:@"..."]
au lieu de[NSString stringWithFormat:@"..."]
. Plus précisément, les appareils iOS ne peut pas auto-libération de la mémoire de la piscine dès que vous préférez si vous créez un autorelease objet.L'ancienne version exige que vous manuellement
release
il, dans une construction comme ceci:Ici,
remainingStr
était nécessaire que temporairement, et ainsi d'éviter les autorelease (ce qui peut arriver BEAUCOUP plus tard dans le programme), j'ai choisi de gérer la mémoire que j'en ai besoin.