Frage

Das verstehe ich nicht ganz statische Variablen, wenn sie in der Implementierung einer Schnittstelle definiert. In Methoden, die ich verstehe, wie sie von lokalen Variablen unterscheiden, aber nicht, wenn sie direkt in einer Implementierung definiert.

Schauen Sie sich diese Beispiele. Was für einen 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 sichtbar für alle Methoden, und wenn ich einen Test, den ich richtig lief interpretiert, myInt in beiden Fällen die gleiche Variable für verschiedene Instanzen der Klasse sein.

War es hilfreich?

Lösung

Das ‚statische‘ Schlüsselwort in diesem Zusammenhang ist das gleiche, wie sie in Klar C wären: es den Umfang der myInt auf die aktuelle Datei begrenzt

.

Andere Tipps

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

Statische Funktionen:
Standardmäßig haben alle Funktionen eines globalen Rahmen. Der statische Bezeichner können Sie die Funktion des Anwendungsbereichs auf die aktuelle Datei begrenzen.

statische lokale Variablen:
Wenn Sie den statischen Modifikator auf eine lokale Variable verwenden, „merkt“ sich die Funktion ihren Wert über Beschwörungen. Zum Beispiel wird die Variable current im folgenden Ausschnitt nie zurückgesetzt, so dass anstelle die Zählung in einer Variablen innerhalb der Haupt-Speicher () können wir countByTwo () tun, um die Aufnahme für uns 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üsselwort hat keinen Einfluss auf den Umfang der lokalen Variablen.
Lesen Sie mehr über die Schlüsselwort static .

.

"in C und Objective-C, eine statische Variable ist eine Variable, die für die gesamte Laufzeit eines Programms zugeordnet Dies steht im Gegensatz zu automatischen Variablen, deren Lebensdauer bei einem einzigen Funktionsaufruf besteht und dynamisch zugewiesen Variablen wie Objekte, die aus dem Speicher freigegeben werden kann, wenn nicht mehr verwendet. Vereinfacht ausgedrückt, eine statische Wert der Variablen wird in ganz Funktion / Methode beibehalten Anrufe. wenn außerhalb einer Funktion deklariert, ist eine statische Variable, um alles in der Datei sichtbar der sie deklariert;., wenn in einer Funktion oder Methode deklariert, ist es nur sichtbar innerhalb dieser Funktion oder eine Methode, aber der Wert wird zwischen Anrufen beibehalten "

Schauen Sie sich die vollständige Erklärung hier:

https://stackoverflow.com/a/4965145/951349

Von Apple "The Objective-C Programming Language": „Deklarieren einer Variable statisch beschränkt ihren Anwendungsbereich nur auf die Klasse - und nur den Teil der Klasse, die in der Datei implementiert ist (. So anders als Instanzvariablen können statische Variablen nicht vererbt werden, oder direkt manipuliert durch, Subklassen). "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top