Kurzbeschreibung: Der eingeklammerte Abschnitt einer Klasse @interface
OR @implementation
ist nur für erklärt Instanzvariablen (auch bekannt als "Ivar"). Das Schlüsselwort extern
dient nur zur Verwendung mit globalen Variablendeklarationen (oder Funktionen, aber das ist ein anderes Thema.)
Daher können Sie kein extern-ivar deklarieren.
Gritty Details: Variablen werden zuerst deklariert und dann definiert. Diese Unterscheidung ist in der Regel für Variablen in lokalen Bereichen unscharf, da eine lokal deklarierte Variable ohne explizite Definition häufig zugewiesen und vom Compiler mit einem Standardwert versehen wird.
Globale Variablen sind potenziell in jedem Bereich verfügbar, vorausgesetzt, der Bereich kennt die globale Existenz. Das ist, wo das Schlüsselwort extern
hereinkommt - es erklärt, dass die globale Variable existiert und woanders definiert wurde. Dies ist nur nützlich, wenn Sie auf eine globale Variable in verschiedenen Codedateien zugreifen möchten.
Best Practices: Ihr Buch hat einige Code, der eine extern
Variable in einer Implementierungsdatei (zB „.m“ Dateien usw.) Erklärt ... das kann funktionieren, aber es ist eine schlechte Praxis, weil du bist potentiell schlechte Annahmen darüber treffen, ob das Globale tatsächlich anderswo eine gültige Definition hat. (Aber komplizierte Compiler entdecken diesen Fehlertyp.)
Stattdessen empfiehlt es sich, eine externe Variable einmal in einer Headerdatei zu deklarieren, eine begleitende Implementierungsdatei zu haben, die die Externs in diesem Header definiert, und Fügen Sie dann diesen Header in andere Implementierungsdateien ein, die diese globale Variable verwenden möchten.
Vielen Dank für Ihre Antwort, HachiEthan. Zufälligerweise hat das Buch, auf das ich mich beziehe, "extern" in der .m-Datei verwendet. –
@Rut Ein wenig Nachforschungen, da ich noch nicht in das Wesentliche von extern gegraben habe! (Und es wird mir mit meiner aktuellen Arbeit helfen.) Wird die Antwort bald aktualisieren. =) – MechEthan
Schätzen Sie es wirklich! –