2010-06-29 7 views
2

J'ai un compteur que j'utilise pour obtenir un objet à cet index de compteurs et j'ai besoin d'y accéder dans une autre classe.Variables globales dans l'objectif C

Comment les variables statiques sont-elles déclarées en Objective C?

Répondre

1

Salut alJaree,
Vous déclarez statique variable dans la mise en œuvre de votre classe et permettre l'accès à celui-ci grâce à des accesseurs statiques:

 
some_class.h: 
@interface SomeClass {...} 
+ (int)counter; 
@end 

some_class.m: 
@implementation SomeClass 
static int counter; 
+ (int)counter { return counter; } 
@end

+0

Merci, mais comment l'utiliser dans une autre classe? Je viens d'avoir une erreur "non déclarée". – jarryd

+0

Vous devez '# importer 'une_classe.h" 'dans chaque fichier d'implémentation qui utilise le compteur. – Paul

+0

@alJaree C'est plus ou moins l '"équivalent" d'une classe avec un membre statique public dans java. Comme Paul l'indique correctement, vous devez l'importer et vous y accédez via [compteur SomeClass]. L'alternative serait de déclarer une variable globale dans un fichier d'en-tête (comme on le ferait en c), mais Marcelo a déjà suggéré d'utiliser cette méthode et je pense que c'est plus propre d'un point de vue OO. –

2

Plutôt que de le rendre global, donner un accès de classe au comptoir de l'autre classe, ou les deux classes partagent une troisième classe qui possède le compteur:

ClassA.h: 
@interface ClassA { 
    int counter; 
} 
@property (nonatomic, readonly) int counter; 

ClassA.m 
@implementation ClassA 
@synthesize counter; 

ClassB.h: 
#import "ClassA.h" 
@interface ClassB { 
    ClassA *a; 
} 

ClassB.m: 
@implementation ClassB 
- (void)foo { 
    int c = a.counter; 
} 
+0

Merci, mais comment? – jarryd

+0

Voulez-vous dire une méthode getter? – jarryd

+0

Utilisez une propriété. Cela devrait suffire à @synthesiser, pour vous épargner la peine d'écrire un getter trivial. –