Théoriquement, ils sont différents. La première chaîne est constante et ne peut pas être released
. La seconde (théoriquement) est allouée sur le tas et devrait être released
quand vous en aurez fini. (Ceci est selon les règles de gestion de la mémoire)
Cependant, dans ce cas particulier il n'y a pas de différence, car l'initialiseur retournera simplement la chaîne d'origine.
parce que le compilateur est assez intelligent pour voir que "aha, vous allouer un objet immuable à partir d'une chaîne constante, donc la chaîne résultante est garantie identique à la chaîne constante d'origine, donc je peux simplement ignorer tout il suffit de réutiliser la chaîne constante ".
Donc, il se trouve qu'ils vont être la même chaîne. Cependant, vos réactions intestinales initiales sont correctes, et vous devriez continuer à les suivre. :)
Ok, merci! –
Le deuxième paragraphe est 100% faux. Le compilateur ne peut pas arriver à ce genre de conclusion dans un langage entièrement dynamique. Au lieu de cela, la méthode '- [NSString initWithString:]' renvoie son paramètre inchangé. Cela a le même effet global, mais nécessite du travail à faire à l'exécution. –
Si vous regardez attentivement, vous n'aurez jamais une instance de NSString. Et, en fait, '[NSString alloc]' renvoie une chaîne de caractères génériques dont la méthode '-init *' détermine si elle peut simplement renvoyer la chaîne passée ou doit faire une allocation (ainsi que déterminer quelle sous-classe de NSString à utiliser). – bbum