2010-11-13 19 views
0

Hey, j'ai eu quelques questions concernant NSString.Peu de questions débutant concernant NSString

En quoi ces deux instructions diffèrent-elles? Ai-je raison de dire que l'autre est une chaîne statique qui n'est pas libérée de la mémoire tant que le programme n'est pas fermé? J'ai toujours utilisé la 2ème méthode et l'ai libérée quand je n'en ai plus besoin. Certains pourraient-ils expliquer un peu plus?

Répondre

4

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. :)

+0

Ok, merci! –

+3

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. –

+2

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