# Comment créer des variables globales ?



## TheSpace (9 Février 2003)

Salut,

Je me lance dans la programmation avec les outils Developer d'Apple. Je programme en Objective-C.

Je ne sais pas comment définir des variables en Global afin de les utiliser dans différentes (IBAction).

Désolé si les termes que j'emploie ne sont pas corrects.

En résumé (pour ceux qui connaissent) je veux faire comme avec les Property sur Real Basic.

Merci


----------



## Eddy58 (9 Février 2003)

Je ne comprend pas très bien ton terme (IBAction). Je ne connais pas le Real Basic non plus. Je pense que tu veux dire par la les méthodes appelées par tes actions definies dans Interface Builder. Tu veux pouvoir modifier une seule et meme variable sur plusieurs methodes c'est ca ?
Mais si ca peut t'éclairer, si tu veux des variables globales qui peuvent etre utilisées dans toutes les méthodes d'une classe, il faut les declarer dans ton fichier d'interfaçage (.h)

Exemple : 
Fichier "MaClasse.h"
----------------------------------
#import &lt;Cocoa/Cocoa.h&gt;

@interface MaClasse:NSObject
{
       int maVariableGlobale;
}
-(IBAction)maMethode1id)sender;
-(IBAction)maMethode2id)sender;

@end

------------------------------------
Fichier "MaClasse.m"

------------------------------------
#import "MaClasse.h"

@implementation MaClasse

-(IBAction)maMethode1id)sender
{
      maVariableGlobale=100;
}

-(IBAction)maMethode2id)sender
{
      maVariableGlobale=200;
}

@end


----------



## plumber (9 Février 2003)

#define ?


----------



## Eddy58 (10 Février 2003)

Je pense que #define est plus une directive du préprocesseur C prévue pour la création de macros, non ? (duo #define/#undef)

Exemple : 
#define ABS(val) ((val&lt;0 ? -(val) : (val))

Macro ABS qui donne la valeur absolue de l'argument val.


----------



## SuperCed (10 Février 2003)

Ben tu fais exactement comme en C, tu ecris :

int maVariableGlobale;

Il faut juste qu'elle ne soit pas definie dans une classe.

Apres, si tu es dans un autre fichier (dans une autre classe), je te conseille de faire un :
extern int i;


Mais bon, il faut bannir un maximum les variables globales!
Des objets et des accesseurs devraient suffire.

Tu peux instancier des objets dans un nib avec interface builder, ca te fera un "objet global".


----------



## Eddy58 (12 Février 2003)

Le problème c'est qu'on ne sait pas si TheSpace veut une variable globale au niveau de sa classe ou au niveau de l'ensemble du projet. Dans ce dernier cas oui une programmation propre impose l'utilisation de l'encapsulation et donc des méthodes accesseurs.


----------

