web-dev-qa-db-fra.com

Pourquoi ProjectName-Prefix.pch n'est-il pas créé automatiquement dans Xcode 6?

Pourquoi ProjectName-Prefix.pch n'est-il pas créé automatiquement dans Xcode 6?

L'en-tête de précompilation n'est-il plus nécessaire?

Où devrais-je écrire le code qui se trouvait dans ProjectName-Prefix.pch avant?

261
Wei

Je soupçonne à cause de modules, qui suppriment la nécessité du #import <Cocoa/Cocoa.h>.

Quant à savoir où placer le code dans un en-tête de préfixe, il n'y a pas de code à placer dans un en-tête de préfixe. Placez 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’ya pas d’autre moyen (comme lorsque vous avez besoin de __FILE__). Si vous avez besoin de macros, mettez-les dans un en-tête et incluez-le.

L'en-tête de préfixe était nécessaire pour les choses énormes et utilisées par presque tout le système (comme Foundation.h). Si vous avez quelque chose d'aussi énorme et omniprésent, vous devez repenser votre architecture. Les en-têtes de préfixes 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. Evitez-les jusqu'à ce que vous ayez un problème sérieux de temps de construction que vous pouvez démontrer, 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 transférer dans clang, mais il est extrêmement rare que ce soit une bonne idée.


EDIT: En réponse à votre question spécifique concernant un HUD que vous utilisez dans tous vos contrôleurs de vue, 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 surtout important pour les catégories, ce qui peut rendre le code très difficile à réutiliser s'il est implicite.

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 au besoin, comme le font les modèles Xcode. PCH a pour but d’améliorer les temps de compilation lorsqu’il s’agit d’en-têtes très volumineux (comme dans UIKit).

135
Rob Napier

Sans la question de savoir s'il est approprié ou non, vous pouvez ajouter le fichier PCH manuellement:

  1. Ajoutez un nouveau fichier PCH au projet: Nouveau fichier> Autre> Fichier PCH.

  2. Dans l’option Paramètres de construction de la cible, définissez la valeur de En-tête du préfixe sur le nom de votre fichier PCH, avec le nom du projet comme préfixe (c.-à-d. Pour le projet nommé TestProject et Fichier PCH nommé MyPrefixHeaderFile, ajoutez la valeur TestProject/MyPrefixHeaderFile.pch à la liste d’expert).

    CONSEIL: Vous pouvez utiliser des éléments tels que $(SRCROOT) ou $(PROJECT_DIR) pour obtenir le chemin de l'emplacement où vous avez placé le .pch dans le projet.

  3. Dans l'option Paramètres de construction de la cible, définissez la valeur En-tête de préfixe de précompilation sur YES.

425
Yedidya Reiss

Vous devez créer votre propre fichier PCH
Ajouter New file -> Other-> PCH file

Ajoutez ensuite le chemin de ce fichier PCH à votre construction setting->prefix header->path

($ (SRCROOT)/nomfichier.pch)

enter image description here

126
Prakash Raj

Je vais vous montrer avec une photo!

  1. Ajouter un nouveau fichier Add a new File

  2. Allez à Paramètres de projet/construction/APPl LLVM 6.0-Language Add a new File

51
Slemon

Pour ajouter un fichier .pch -

1) Ajouter un nouveau fichier .pch à votre projet-> Nouveau fichier-> autre-> fichier PCH

2) Allez dans les paramètres de construction de votre projet.

3) Recherchez "en-tête de préfixe". Vous pouvez trouver cela sous Apple LLVM.

4) Collez ceci dans le champ $(SRCROOT)/yourPrefixHeaderFileName.pch

5) Nettoyer et construire le projet. C'est ça!!!

enter image description here

23
Subham93

Si vous décidez d'ajouter un fichier .pch manuellement 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 car il teste le langage utilisé:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif
12
mgm

Utilisation :

$ (PROJECT_DIR)/Nom du projet/PrefixHeader.pch

7
Arash Zeinoddini

Pour ajouter un nouveau fichier PCH, suivez les étapes ci-dessous:

(1) Ajouter un nouvel écran - Sélectionnez iOS - Autre et fichier PCH

(2) ajoutez le chemin de ce fichier PCH à votre projet - BuildSetting - Apple Langage LLVM 6.0

Ajouter un chemin d’en-tête de préfixe VotreNomApplication (chemin-racine)/nomfichier.pch

7
Hitesh Vaghela