Im Gegensatz zu Java, wo eine statische Variable für alle Instanzen einer Klasse scoped ist, static
in C bedeutet, dass eine Variable zugänglich ist nur innerhalb der Datei, in der sie deklariert ist. Sie können beispielsweise eine statische Variable in einer Funktion deklarieren, die den Wert nur beim ersten Mal festlegt, like this.
Eine Sache, die Sie nicht erwähnt haben, ist die Beziehung zwischen den Klassen A, B und C. Wenn sie in einer Vererbungshierarchie sind und Sie erwarten, dass die statische Variable wie in Java geerbt wird, wird die Methode von zpastenack wird funktionieren.
Wenn die drei Klassen nicht verwandt sind und Sie nur auf den in A deklarierten Wert zugreifen möchten, ist extern
ein geeigneterer Weg. In diesem Fall möchten Sie die Variable in ClassA.h als extern
deklarieren und dann in Class.m definieren. Solange ClassB und ClassC ClassA.h importieren, können sie mit derselben externen Definition verlinken.
ein feiner Punkt ist, dass, statt extern
selbst verwenden, es robuster ist OBJC_EXPORT
zu verwenden, die in objc-api.h definiert ist und Griffe unter C++ und kompilieren. Hier ist ein Codebeispiel:
// ClassA.h
OBJC_EXPORT NSString* commonString;
...
// ClassA.m
NSString* commonString = @"OldValue";
// ClassB.m
#import "ClassA.h"
...
commonString = @"NewValue"; // Can be inside a function or method
Natürlich mit externed Variablen auf diese Weise ein berüchtigtes schafft, viel geschmähte globale Variable, die in diesem jemand zerbrechlich ist, kann es lesen oder schreiben, und der Zugang ist unkontrolliert. Dies ist der einfache Ansatz und beantwortet Ihre Frage zur Verwendung von static
vs. extern
.Als Konstruktionsprinzip ist die Kapselung durch Umhüllen der Variablen mit Klassenmethoden jedoch viel sicherer, wenn auch komplexer. Wenn in objektorientierten Sprachen der Effekt, den Sie erreichen möchten, der einer statischen Klassenmethode entspricht, ist die Kapselung wahrscheinlich der richtige Weg.
Vielen Dank. Es gelöst. – Yogini