2009-06-15 6 views
10

à savoir, ne ObjectiveC se comportent comme C, en ce que si vous créez un pointeur par exemple:Dans ObjectiveC, les pointeurs sont-ils des variables d'instance de classe initialisées à 'nil' ou non?

NSString* c; 

Est-ce que le point c à zéro ou à la valeur aléatoire dans la zone de mémoire qui a été réservée pour elle? En d'autres termes, les pointeurs sont-ils pré-initialisés, ou dois-je le faire moi-même? Comme je l'ai dit, je suis conscient que ce n'est pas le cas en C/C++, mais je me demande s'il y a de la magie ObjC ici ou non.

Répondre

13

instances de classe variables Objective-C sont garanties à initialiser à leur valeur vide (0, nul, etc ...)

+0

Brilliant - bravo. Malheureusement, cela signifie que mon bug n'est pas là où je le pensais. – Chaos

+0

Plus spécifiquement, l'espace mémoire d'une classe est remis à zéro lorsqu'il est alloué. Les pointeurs dans une méthode ou une fonction fonctionnent exactement comme dans C. – Chuck

1

Ils sont nuls, et vous êtes autorisés à assumer cela, par exemple par des tests :

if (nil == myVariableIHaventInitialisedYet) 
{ 
    myVariableIHaventInitialisedYet = [SomeThingIMightMake initWithLove]; 
} 
+0

Nice code yoda! – toxaq

3

Les variables d'instance de classe et les variables statiques/globales sont initialisées à nil/NULL/0/false selon le cas.

Cependant, les variables locales ne sont pas initialisées.

0

Surveillez les variables locales sur celle-ci. Ils ne sont pas initialisés à zéro, alors assurez-vous qu'ils ont été initiés quelque part avant de les utiliser si vous n'avez pas init dans votre déclaration. Comme le dit Peter, la classe, l'instance et le statique sont initiés à zéro pour vous donc pas de soucis là-bas.

Normalement aucun problème, mais en particulier, cela fera une différence dans les appels avec des références de pointeur passées (comme NSError **).

Questions connexes