Réponses:
Je soupçonne à cause des modules, qui suppriment le besoin de #import <Cocoa/Cocoa.h>
.
Quant à savoir où mettre le code que vous mettriez dans un en-tête de préfixe, il n'y a pas de code que vous devez mettre dans un en-tête de préfixe. Mettez vos importations dans les fichiers qui en ont besoin. Mettez vos définitions dans leurs propres fichiers. Mettez vos macros ... nulle part. Arrêtez d'écrire des macros, sauf s'il n'y a pas d'autre moyen (comme lorsque vous en avez besoin __FILE__
). Si vous avez besoin de macros, mettez-les dans un en-tête et incluez-les.
L'en-tête du préfixe était nécessaire pour les choses qui sont énormes et utilisées par presque tout dans le système entier (comme Foundation.h
). Si vous avez quelque chose d'énorme et d'omniprésent, vous devriez repenser votre architecture. Les en-têtes de préfixe rendent la réutilisation du code difficile et introduisent des problèmes de construction subtils si l'un des fichiers répertoriés peut changer. Évitez-les jusqu'à ce que vous ayez un sérieux problème de temps de construction dont vous pouvez démontrer qu'il est considérablement amélioré avec un en-tête de préfixe.
Dans ce cas, vous pouvez en créer un et le passer en clang, mais il est incroyablement rare que ce soit une bonne idée.
EDIT: Pour votre question spécifique sur un HUD que vous utilisez dans tous vos contrôleurs de vue, oui, vous devez absolument l'importer dans chaque contrôleur de vue qui l'utilise réellement. Cela rend les dépendances claires. Lorsque vous réutilisez votre contrôleur de vue dans un nouveau projet (ce qui est courant si vous construisez bien vos contrôleurs), vous saurez immédiatement ce dont il a besoin. Ceci est particulièrement important pour les catégories, qui peuvent rendre le code très difficile à réutiliser si elles sont implicites.
Le fichier PCH n'est pas là pour se débarrasser des dépendances de listage. Vous devez toujours importer UIKit.h
ou Foundation.h
selon les besoins, comme le font les modèles Xcode. La raison pour laquelle le PCH est d'améliorer les temps de construction lorsqu'il s'agit d'en-têtes vraiment massifs (comme dans UIKit).
TWAPIManager.m
, par exemple, vers un autre projet, vous obtiendrez des erreurs qui TWALog()
ne sont pas définies, sans aucune indication sur l'endroit où le trouver. J'ai rencontré exactement ce problème sur plusieurs grands projets essayant de partager du code. Sa création TWAPILog.h
et son importation résout ce problème avec un coût de développement insignifiant.
Sans vous demander s'il est approprié ou non, vous pouvez ajouter manuellement un fichier PCH:
Ajoutez un nouveau fichier PCH au projet: Nouveau fichier> Autre> Fichier PCH .
À l' option Paramètres de construction de la cible , définissez la valeur de l'en- tête de préfixe sur le nom de votre fichier PCH, avec le nom du projet comme préfixe (c'est-à-dire pour le projet nommé TestProject
et le fichier PCH nommé MyPrefixHeaderFile
, ajoutez la valeur TestProject/MyPrefixHeaderFile.pch
à la liste).
CONSEIL: Vous pouvez utiliser des choses comme $(SRCROOT)
ou $(PROJECT_DIR)
pour accéder au chemin où vous placez le .pch
dans le projet.
Dans l' option Paramètres de construction de la cible , définissez la valeur de l'en- tête de préfixe de précompilation sur YES
.
Vous devez créer votre propre fichier PCH
AjouterNew file -> Other-> PCH file
Ajoutez ensuite le chemin de ce fichier PCH à votre build setting->prefix header->path
($ (SRCROOT) /filename.pch)
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
Pour ajouter un fichier .pch-
1) Ajoutez un nouveau fichier .pch à votre projet-> Nouveau fichier-> autre-> Fichier PCH
2) Accédez au paramètre de construction de votre projet.
3) Recherchez "en-tête de préfixe". Vous pouvez le trouver sous Apple LLVM.
4) Collez ceci dans le champ $(SRCROOT)/yourPrefixHeaderFileName.pch
5) Nettoyez et construisez le projet. C'est tout!!!
Si vous décidez d'ajouter manuellement un fichier .pch et que vous souhaitez utiliser Objective-C comme avant xCode 6, vous devrez également importer les frameworks UIKit et Foundation dans le fichier .pch. Sinon, vous devrez importer ces frameworks manuellement dans chaque fichier d'en-tête. Vous pouvez quand même ajouter le code suivant pendant qu'il teste la langue utilisée:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
Utilisation :
$ (PROJECT_DIR) / Nom du projet / PrefixHeader.pch
Pour ajouter un nouveau fichier PCH, suivez les étapes ci-dessous:
(1) Ajouter une nouvelle vue - Sélectionnez iOS - Autre et fichier PCH
(2) ajouter le chemin de ce fichier PCH à votre projet - BuildSetting - Apple LLVM 6.0 Language
Ajouter un chemin d'en-tête de préfixe défini YourApplicationName (root-path) /filename.pch