+ [NSString stringWithString:] - quel est le point?
Comme NSString
les chaînes sont immuables, qu'est-ce que la valeur de la stringWithString:
méthode de classe?
- Je obtenir de l'utilité lorsqu'il est utilisé avec NSMutableString
je ne voyais pas l'utilité avec la NSString
classe.
source d'informationauteur jeff7091
Vous devez vous connecter pour publier un commentaire.
Vous pourriez avoir un NSMutableString (ou certains de la maison-grandi sous-classe NSString) que vous souhaitez dupliquer.
Bien sûr, vous pouvez aussi simplement faire une copie:
mais vous propre la copie et doit libérer ou autorelease.
"Andy", souligne dans #318666, c'est lié à la gestion de la mémoire, de citer:
(Prises de ici)
Renvoie une chaîne créée par copier les caractères à partir d'une autre chaîne
C'est équivalent à
Aussi, si vous avez un pointeur vers un NSString, il peut effectivement être une sous-classe de NSString comme NSMutableString. Donc, si vous voulez stocker la chaîne et être assuré qu'elle ne change pas, vous devriez faire une copie de celui-ci, d'où stringWithString existe.
Comme un autre cas d'utilisation, si pour une raison quelconque, vous créez votre propre sous-classe de NSString ou NSMutableString,
stringWithString:
fournit un moyen pratique pour l'instancier avec une instance de NSString, NSMutableString, ou MyCustomString.J'utilise souvent
+stringWithString:
quand j'ai besoin de créer unNSMutableString
mais commencer avec une valeur initiale. Par exemple:Pour info, maintenant que nous sommes en train de compiler avec ARC est activé, vous n'avez pas à valider manuellement à tous, ARC insérer la publication des appels lors de la compilation. Alors, comment est-il encore autre chose? stringWithString est toujours ajouté à l'autorelease pool qui est asséché à l'avenir (sauf si vous avez créé votre propre autorelease pool). initWithString aura une version d'appel juste avant que la fonction se termine, donc si vous n'avez pas le conserver quelque part dans la méthode, vous pouvez être sûr que la chaîne est détruit à la fin de l'appel de la fonction. Cela vous donne un contrôle plus serré sur la gestion de la mémoire par opposition à l'aide autoreleased objets.