Contrairement à Java, où une variable statique est définie pour toutes les instances d'une classe, static
C signifie qu'une variable est accessible qu'à partir dans le fichier dans lequel elle est déclarée. Il vous permet de faire des choses comme déclarer une variable statique à l'intérieur d'une fonction, qui définit la valeur que la première fois, comme ça.
Une chose que vous n'avez pas mentionné, c'est la relation entre les classes A, B, et C. Si ils sont dans une hiérarchie d'héritage, et vous vous attendez de la variable statique à être héréditaire, comme en Java, la méthode décrite par zpasternack fonctionne.
Si les trois classes sont indépendants, et vous voulez juste pour accéder à la valeur déclarée dans Une, alors extern
est un plus appropriés. Dans ce cas, vous voulez déclarer la variable comme extern
de ClassA.h, puis de le définir dans la Classe.m. Aussi longtemps que ClassB et ClassC importation ClassA.h, ils seront en mesure de relier à l'encontre de la même extern définition.
Un bon point est que, au lieu d'utiliser extern
par lui-même, il est plus robuste à utiliser OBJC_EXPORT
, qui est défini dans l'objc-api.h et gère la compilation sous C++. Voici un exemple de code:
// 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
Bien sûr, l'aide externed variables de cette façon crée un infâme, tant décrié variable globale, qui est fragile en ce que quelqu'un peut le lire ou l'écrire, et l'accès est contrôlé. C'est l'approche simple, et les réponses à vos question sur l'utilisation d' static
vs extern
. Cependant, comme un principe de conception, l'encapsulation fournis par emballage de la variable avec les méthodes de la classe est beaucoup plus sûr, mais plus complexe. Dans les langages orientés objet, lorsque l'effet que vous essayez d'atteindre est celui d'une classe-méthode statique, l'encapsulation est probablement la bonne façon de faire.