Un autre exemple d'un problème lorsque le mot-clé extern
n'est pas utilisé :
Disons que vous avez une variable globale dans un fichier d'en-tête :
NSString *globalVar = @"Wonderful";
Et vous l'utilisez à 3 endroits en important ce fichier d'en-tête. Votre code ne compilera pas, le linker se plaignant que vous avez 3 symboles en double définis dans votre code. Pour résoudre ce problème, vous avez deux façons de procéder :
Utiliser static
, auquel cas chaque fichier qui importe ce fichier d'en-tête aura sa propre référence définie (et changer une chaîne ne affectera pas les autres chaînes importées dans d'autres fichiers) :
static NSString *globalVar = @"Wonderful";
Utiliser extern
dans le fichier .h et le définir dans le fichier .m. De cette façon, il n'y aura qu'une seule référence définie et chaque fichier utilisera cette même référence (les changements étant reflétés dans tous les fichiers) :
extern NSString *globalVar; // dans le .h
NSString *globalVar = @"Wonderful"; // dans le .m
Choisissez l'approche qui convient le mieux.