webentwicklung-frage-antwort-db.com.de

Was bedeuten statische Variablen bei der Implementierung einer Schnittstelle?

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 sind.

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. Wenn ich einen Test richtig interpretiert habe, ist myInt in beiden Fällen dieselbe Variable für verschiedene Instanzen der Klasse.

68
quano

Das Schlüsselwort 'static' ist in diesem Kontext dasselbe wie in einfachem C: Es begrenzt den Bereich von myInt auf die aktuelle Datei.

68
smorgan

Leider hat es unterschiedliche Auswirkungen, je nachdem, wo Sie es verwenden.

Statische Funktionen:
Standardmäßig haben alle Funktionen einen globalen Umfang. Mit dem statischen Bezeichner können Sie den Funktionsumfang auf die aktuelle Datei beschränken.

Statische lokale Variablen:
Wenn Sie den statischen Modifizierer 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 Zählung in einer Variablen innerhalb von 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 Schlüsselworts static wirkt sich nicht auf den Bereich lokaler Variablen aus.
Lesen Sie mehr über das statische Schlüsselwort .

85
appsunited

Sowohl in C als auch in Objective-C ist eine statische Variable eine Variable, die während der gesamten 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 Diese Variable kann aus dem Speicher freigegeben werden, wenn sie nicht mehr verwendet wird. Einfacher ausgedrückt, der Wert einer statischen Variablen wird bei allen Funktions-/Methodenaufrufen beibehalten. Wenn sie außerhalb einer Funktion deklariert wird, ist eine statische Variable für alle Elemente in der Datei sichtbar, in der sie sich befindet deklariert; wenn es in einer Funktion oder Methode deklariert wird, ist es nur in 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

20
smileBot

Aus Apples "The Objective-C Programming Language": "Durch das Deklarieren einer Variablen statisch wird der Gültigkeitsbereich auf die Klasse beschränkt - und auf den Teil der Klasse, der in der Datei implementiert ist. (Anders als in einer Instanz Variablen, statische Variablen können nicht von Unterklassen geerbt oder direkt bearbeitet werden. "

16
c roald