Ich verstehe statische Variablen nicht ganz, wenn sie in der Implementierung einer Schnittstelle definiert werden. In Methoden verstehe ich, wie sie sich von lokalen Variablen unterscheiden, aber nicht, wenn sie direkt in einer Implementierung definiert werden.
Schau 'dir diese Beispiele an. Welchen Unterschied machen diese beiden praktisch?
#include "MyClass.h"
@implementation MyClass
int myInt;
...
@end
Und:
#include "MyClass.h"
@implementation MyClass
static int myInt;
...
@end
myInt
ist in beiden Fällen für alle Methoden sichtbar, und wenn ich einen Test interpretiert habe, den ich korrekt ausgeführt habe, myInt
ist in beiden Fällen dieselbe Variable für verschiedene Instanzen der Klasse.
Antworten:
Das Schlüsselwort 'static' ist in diesem Kontext dasselbe wie in C: Es beschränkt den Umfang von myInt auf die aktuelle Datei.
quelle
Leider hat es unterschiedliche Auswirkungen, je nachdem, wo Sie es verwenden.
Statische Funktionen:
Standardmäßig haben alle Funktionen einen globalen Bereich. Mit dem statischen Bezeichner können Sie den Funktionsumfang auf die aktuelle Datei beschränken.
Statische lokale Variablen:
Wenn Sie den statischen Modifikator für eine lokale Variable verwenden, „merkt“ sich die Funktion ihren Wert über Aufrufe hinweg. Beispielsweise wird die Variable currentCount im folgenden Snippet nie zurückgesetzt. Anstatt die Anzahl in einer Variablen in main () zu speichern, können wir countByTwo () die Aufzeichnung für uns durchführen lassen.
// main.m #import <Foundation/Foundation.h> int countByTwo() { static int currentCount = 0; currentCount += 2; return currentCount; } int main(int argc, const char * argv[]) { @autoreleasepool { NSLog(@"%d", countByTwo()); // 2 NSLog(@"%d", countByTwo()); // 4 NSLog(@"%d", countByTwo()); // 6 } return 0; }
Diese Verwendung des statischen Schlüsselworts wirkt sich nicht auf den Umfang lokaler Variablen aus.
Lesen Sie mehr über das statische Schlüsselwort .
quelle
"Sowohl in C als auch in Objective-C ist eine statische Variable eine Variable, die für die gesamte Lebensdauer eines Programms zugewiesen wird. Dies steht im Gegensatz zu automatischen Variablen, deren Lebensdauer während eines einzelnen Funktionsaufrufs besteht, und dynamisch zugewiesenen Variablen wie Objekten Einfacher ausgedrückt, der Wert einer statischen Variablen bleibt bei allen Funktions- / Methodenaufrufen erhalten. Wenn eine statische Variable außerhalb einer Funktion deklariert wird, ist sie für alles in der Datei sichtbar, in der sie sich befindet deklariert; wenn es innerhalb einer Funktion oder Methode deklariert wird, ist es nur innerhalb dieser Funktion oder Methode sichtbar, aber der Wert bleibt zwischen den Aufrufen erhalten. "
Die vollständige Erklärung finden Sie hier:
https://stackoverflow.com/a/4965145/951349
quelle
Aus Apples "The Objective-C Programming Language": "Das Deklarieren einer statischen Variablen beschränkt ihren Gültigkeitsbereich nur auf die Klasse - und nur auf den Teil der Klasse, der in der Datei implementiert ist. (Daher können statische Variablen im Gegensatz zu Instanzvariablen nicht vererbt werden von oder direkt von Unterklassen manipuliert). "
quelle