2010-06-25 21 views

Répondre

1

La variable est techniquement indéfinie (peut avoir une valeur quelconque) avant de lui affecter une valeur. Très probablement, ce sera égal à zéro. De plus, nil et NULL sont tous deux définis sur zéro. Cependant, cette comparaison n'est pas recommandée. Vous ne devriez utiliser que nil lors de la comparaison de pointeurs (il n'est pas destiné à être utilisé avec des primitives).

+0

très probablement, * mais pas toujours. * @Kevin a raison, et vous devriez toujours initialiser les variables. Cependant, 'int' qui sont ivars pour les objets * sont * initialisés à 0 lors de l'appel de' [init init]; ' –

0

nil est une valeur spécifique réservée aux pointeurs d'objets Objective-C. Il est très similaire à NULL (0) mais a une sémantique différente lorsqu'il est utilisé avec le passage de message.

Les types de données primitifs locaux tels que int ne sont pas initialisés en Objective-C. La valeur de l'index ne sera pas définie avant d'y avoir écrit.

void foo() { 
    //initialize local variable 
    int x = 5; 
} 

//initialise static variable 
static int var = 6; 
+1

Ils sont initialisés à 0 s'ils ont une durée de stockage statique, non? –

+0

Je ne pense pas qu'aucun type primitif est initialisé dans C/Objective-C, vous devez toujours _ initialiser vous-même les variables primitives. – Akusete

+3

Les variables avec durée de stockage statique sont définitivement initialisées en C (C99 §6.7.8.10). –

4

Il n'y a pas de "nil" pour les ints. C'est une valeur d'objet. En ce qui concerne les variables sont initialisés par défaut:

  • variables locales non statiques ne sont pas initialisé à une valeur définie (dans la pratique, ils ont généralement tout modèle bit était auparavant dans la mémoire qu'ils occupent)
  • les variables statiques sont initialisés à 0
  • les variables globales sont initialisées à 0
  • les variables d'instance sont initialisés à 0

Notez que la première règle est également valable aux variables d'objet locales. Ils ne seront pas initialisés à zéro pour vous. (Variables d'instance avec les types d'objets seront, cependant.)

1

La valeur d'un entier qui n'a pas encore été attribué dépend de sa déclaration - une int avec la durée de stockage statique est égal à zéro si vous n'attribuez pas autre chose . Un int avec la durée de stockage automatique ou allouée peut avoir n'importe quelle valeur si vous ne l'initialisez pas explicitement. Par ailleurs, mettre une déclaration d'objet dans votre entête vous causera des douleurs plus tard.