2010-07-07 12 views
37

Je veux préciser si différentes instances d'une part de la classe Objective-C variables statiques qui se produisent méthodes à l'intérieur, ou si chaque instance obtient sa propre copie:variables statiques dans les méthodes Objective-C

- (void) myMethod { 
    static int myVar = 0; 
} 

Répondre

30

C'est la même comme une variable statique en C; les instances partageront la variable. Si vous voulez que chaque instance ait sa propre copie, vous voulez une variable d'instance (déclarée dans le bloc @interface).

+3

Vous ne pouvez pas vraiment dire "même que C." "Subjective" C n'a pas d'instances au sens objectif. – iter

+6

@iter, c'est la même chose que n'importe quelle variable statique en C, c'est tout ce que je veux dire. S'il s'agit d'un global statique, il n'y en a qu'un par unité de compilation, s'il s'agit d'un local statique, il y en a un par fonction (ou méthode dans Objective-C) qui le référence. –

78

Les locals statiques sont partagés entre les appels de méthode ET les instances. Vous pouvez penser à eux comme GLOBALS qui ne sont visibles dans leurs méthodes:

- (void) showVars { 
    int i = 0; 
    static int j = 0; 
    i++; j++; 
    NSLog(@"i = %i ; j = %i", i, j); 
} 

[...]

[obj1 showVars]; 
[obj2 showVars]; 
[obj1 showVars]; 
[obj2 showVars]; 

appels ci-dessus sur 2 instances différentes seront de sortie:

i = 1 ; j = 1 
i = 1 ; j = 2 
i = 1 ; j = 3 
i = 1 ; j = 4 
+0

Toute solution pour les variables locales statiques spécifiques à l'instance? – fatuhoku

+1

@fatuhoku qu'est-ce que cela signifie même? Comment sont-ils statiques s'ils sont spécifiques à l'instance? – lensovet

Questions connexes