Je vois fréquemment un extrait de code comme celui-ci dans les méthodes d'instance de classe: Je n'arrive pas à comprendre pourquoi cela fonctionne. Est-ce simplement l'équivalent Objc d'un #define qui est limitée à la portée de la méthode? Je pense que je comprends la nature statique de la variable, mais plus spécifiquement des Nstrings, pourquoi ne pas être alloc'd, init'd? P> merci ~ p> p>
5 Réponses :
pour la partie de Je pense d'abord, on peut penser comme une commodité, mais ce n'est pas aussi pareil pour J'ai trouvé un lien utile ici. Vous pouvez regarder ça
Nstring et raccourcis P>
pour la partie de nsstring alloc, init code>: p>
[[Nstring Alloc] init] code>. p>.
statique code> et
#define code>: p>
L'instance statique code> dans la classe signifie que vous pouvez accéder à une instance de la classe. Vous pouvez modifier la valeur de statique. Pour la fonction, cela signifie que la valeur de la variable est conservée entre les appels de fonction p>
#define code> est mis une constante macro pour éviter le numéro de magie et la chaîne et définir des macros de fonction.
#define max_number 100 code>. Ensuite, vous pouvez utiliser
int a [max_mumber] code>. Lorsque le code est compilé, il sera copié et collé à
int A [100] code> p>
Ce n'était pas moi, mais je suis d'accord - votre réponse est simplement incompréhensible. Voir ma réponse, il enfreint la question de l'affiche originale en trois sujets différents (comment @ "text" code> littéraux sont traités, ce que le mot clé code> stats code> fait et comment cela diffère de un
#define code>) et donne des réponses claires que j'espère que les gens peuvent apprendre quelque chose à partir de.
Ah ok. Je n'avais pas la partie de statique. Parce que, à la première fois, je ne sais que sur Nstring Alloc, Initi Je ne réponds donc que pour cette partie. Je vais éditer ma réponse
statique code>, dans ce contexte, n'a rien à voir avec les cours.
Je ne comprends pas, une instance statique signifie la même chose pour les cas de classe, non?
Le mot clé code> statique code> peut signifier beaucoup de choses différentes selon le contexte. Dans ce contexte, nous parlons d'une variable déclarée statique code> dans une fonction, ce qui signifie simplement que sa valeur est préservée entre les appels à la fonction. Le fait que la fonction se trouve également être une méthode n'est pas pertinente.
OK j'ai compris. Merci, je vois le mot à l'intérieur de la méthode de la question
C'est un cas d'init de cas spécial pour Aussi, je pense que cela est vrai même si vous n'utilisez pas le mot clé statique. De plus, je pense que tous les autres Ce n'est pas la même chose qu'un nstring code> qui pointe simplement le pointeur
nstring code> sur une instance allouée et initée au démarrage (ou peut-être paresseusement, je ne suis pas sûr. ) Il y a l'un de ces instances code> Nstring code> créées dans cette mode pour chaque
@ "" code> que vous utilisez dans votre programme. P>
nstrings code> initialisés avec cette chaîne pointeront sur la même instance (pas un problème car ils sont immuables.) P>
#define code>, car vous avez réellement une variable
nstring code> en créant la chaîne avec le
= @ "tout ce que" code > Initialisation. Il semble plus équivalent à C
Const Char * Somestr = "bla bla bla" code>. P>
Je pense que la question a deux parties non liées. P>
one est pourquoi ne pas être alloc et injusté. La réponse est que lorsque vous écrivez un littéral de chaîne de l'objectif-C du formulaire L'autre question est ce que le modificateur code> statique code>. Il fait la même chose que cela fait dans une fonction C, garantissant que la variable code> mystring code> est la même chaque fois que la méthode est utilisée (même entre différentes instances d'objet). P>
A "foo" code>, le compilateur de l'objectif-C créera une instance
nstring code> pour vous. p>
#define code> macro est quelque chose de très différent: c'est "Coupe programmatique et coller" du code source, exécuté avant que le code arrive au compilateur. P>
Vous ne voyez pas un appel à Dans ce contexte, alloc code> /
init code> car le
@ "..." code> construction crée une constante em> chaîne en mémoire (via le compilateur). P>
statique code> signifie que la variable n'est pas accessible du fichier dans lequel elle est définie. P>
vient de sculpter sur le même Selon K & R Chaque variable en C a deux attributs de base: Type Strong> (par exemple, float) et La classe de stockage forte> statique forte> a deux effets différents selon qu'il est utilisé: p>
une variable Les variables globales (déclarées au même niveau qu'une fonction) sont toujours statiques. Déclicant explicitement une variable globale (ou une fonction) d'être Si vous souhaitez en savoir plus, suivez la lecture sur interne et externe Linkage en C . p> Statique Nstring code> Déclaration. Je me demandais comment exactement cette magie statique fonctionne, alors je lisais un peu. Je vais seulement aborder la partie statique de votre question. P>