2010-07-07 14 views
37

Ich möchte, ob verschiedene Instanzen eines Objective-C Klasse Anteil statische Variablen klären, die in Methoden auftreten, oder wenn jede Instanz eine eigene Kopie bekommt:statische Variablen in Objective-c-Methoden

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

Antwort

30

Es ist das gleiche als statische Variable in C; Die Instanzen teilen sich die Variable. Wenn jede Instanz eine eigene Kopie haben soll, möchten Sie eine Instanzvariable (im Block @interface deklariert).

+3

Man kann nicht wirklich "dasselbe wie C" sagen. "Subjektiv" C hat keine Instanzen im objektiven Sinne. – iter

+6

@iter, es ist das gleiche wie jede statische Variable in C, alles was ich meine. Wenn es sich um ein statisches globales Element handelt, gibt es nur ein Element pro Kompilierungseinheit. Wenn es sich um ein statisches Local handelt, gibt es eines pro Funktion (oder Methode in Objective-C), das auf es verweist. –

78

Statische Locals werden zwischen Methodenaufrufen UND Instanzen gemeinsam genutzt. Sie können als Globals von ihnen denken, die nur in ihren Methoden sichtbar sind:

- (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]; 

Above Anrufe auf zwei verschiedenen Instanzen folgende Ausgabe:

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

Jede Lösung für instanzspezifische statische lokale Variablen? – fatuhoku

+1

@fatuhoku was bedeutet das überhaupt? Wie sind sie statisch, wenn sie instanzspezifisch sind? – lensovet