Des constantes NSString accessibles dans tout le projet
Bonsoir,
Pour éviter les erreurs fracassantes, ou, plus ennuyeuses encore, celles qui ne font aucun bruit, dans le genre mal orthographier une clé, j'aimerais connaà®tre la meilleure façon de faire:
1. #define kConstantKey @wannaBeConstant
2. une constante, et là j'aimerais savoir comment me débrouiller avec static, const, NSString*, extern, etc. parce que les avis sont divers et peu clairs sur le web.
Ensuite, où placer cette constante?
1. Dans un fichier Constants.h et faire des #include partout?
2. Dans un fichier Constants.h et faire un #include dans le fichier .pch?
3. Directement dans le fichier .pch?
Il s'agit de noms de clés dans les NSUserDefaults, j'en fais un usage dans beaucoup de fichiers et je souhaiterais ne définir chaque clé qu'une seule fois pour tout le projet.
Merci!
Réponses
La réponse est évidemment "extern TYPE const NOM;" dans un .h et "TYPE const NOM = VALEUR;" dans le .m quant à ou mettre ça ça dépend du contexte logique sémantique de ta constante. Bref une recherche sur les forums devrait déjà répondre à toutes ces questions.
Plein de fois, en effet... donc embarras du choix. Finalement j'ai opté pour un fichier Constants.h contenant des déclarations comme:
Je ne fais un "include" que dans mon fichier .pch (ça m'oblige à faire un build).
Et ça a dupliqué jusqu'au moment où j'ai ajouté static. Peux-tu m'expliquer?
Quant à static je l'ai déjà expliqué dans les autres posts et pas envie de réécrire les mêmes romans à nouveau surtout depuis mon iPhone
Il faut éviter d'inclure du code amené à évoluer dans le .pch.
Dans ton exemple, chaque fois que tu ajouteras une constante ou changeras son nom, TOUS les fichiers sources seront recompilés.
D'autant plus qu'il est peu probable qu'une constante concerne tout le projet, à la fois les couches Modèle, Contrôleur et Vue.
Mis à part le choix pch ou non pch, berfis déclare et instance sa constante dans le .h, alors que Ali conseillait de la déclarer dans le .h et de l'instancier dans un .m.
Quelle différence cela fait-il ?
Voilà .
(Il faut suivre ce que dit Sobek Aligator, cela va sans dire).