Je me demande ce qui décide si vous êtes autorisé à utiliser <Header.h>
ou "Header.h"
lorsque vous importez des fichiers dans Objective-C. Jusqu'ici, j'ai observé que vous utilisiez les guillemets ""
pour les fichiers de votre projet auxquels vous avez attribué la source d'implémentation, ainsi que les crochets <>
lorsque vous faites référence à une bibliothèque ou à un framework.
Mais comment ça marche? Que devrais-je faire pour que mes propres cours utilisent les crochets? Pour le moment, Xcode ne me permettra pas de le faire pour mes propres en-têtes.
De plus, en regardant dans certains en-têtes de frameworks, je constate que les en-têtes se référencent avec <frameworkname/file.h>
. Comment fonctionne ça? Cela ressemble beaucoup à des paquets en Java, mais pour autant que je sache, il n’existe pas de paquet en Objective-C.
Objective-C a ceci en commun avec C/C++; la forme citée est pour les inclusions "locales" de fichiers (vous devez spécifier le chemin relatif du fichier actuel, par exemple #include "headers/my_header.h"
), tandis que la forme de crochet inclura pour les inclusions "globales" - celles trouvées quelque part sur le chemin d'inclusion passé au compilateur (par exemple #include <math.h>
).
Donc, pour que vos propres en-têtes utilisent < >
et non " "
, vous devez transmettre le chemin relatif ou absolu de votre répertoire d'en-tête au compilateur. Voir "Comment ajouter un chemin d'inclusion global pour Xcode" pour plus d'informations sur la procédure à suivre dans Xcode.
Voir cette page MSDN pour plus d’informations.
En C, la convention veut que les fichiers d’en-tête situés entre <> soient recherchés dans les répertoires "système" et "" dans les répertoires utilisateur ou locaux.
La définition de système et local est un peu vague, je suppose. Je crois qu’il est recherché dans les répertoires système dans le chemin d’inclusion ou dans CPPFLAGS et le répertoire local ou le répertoire spécifié avec -I au compilateur sont recherchés dans les fichiers "header.h".
Je suppose que cela fonctionne de la même manière pour Objective-C.
Pour importer vos propres classes en utilisant "<>", vous devez placer les fichiers d'en-tête (* .h) dans le dossier lib du compilateur ou définir un pontage SYSTEM VARIABLES dans votre dossier lib.
Ou définissez Always Search User Path
sur YES
pour pouvoir utiliser des crochets.
Avec des équerres, par exemple <Foundation/Foundation.h>
vous importez des fichiers système.
Vous utilisez des guillemets "Person.h"
pour importer des fichiers locaux (fichiers que vous avez créés) et indiquer au compilateur où les rechercher.
""
- Quotation marks
Recherchez le fichier nommé dans le même dossier que ce fichier (le fichier .m dans lequel la ligne # import apparaît).
<>
- Angle brackets
Recherchez le fichier nommé parmi les divers chemins de recherche d'en-tête fournis dans les paramètres de construction. (Ces chemins de recherche sont définis automatiquement et vous n’avez normalement pas besoin de les modifier.)
En général, vous utiliserez des crochets angulaires pour faire référence à un fichier d’en-tête appartenant à l’API Cocoa et des guillemets pour désigner un fichier d’en-tête que vous avez écrit. Si vous souhaitez savoir ce qu’une directive import doit importer, sélectionnez-la (dans Xcode), puis choisissez Fichier → Ouvrir rapidement pour afficher le contenu du fichier d’en-tête désigné.
Lisez plus ici - https://www.oreilly.com/library/view/programming-ios-6/9781449365783/ch01s10.html
Juste tombé sur le même problème, il existe 2 types de chemins de recherche est Xcode:
User Header Search Paths
Header Search Paths
Si vous ajoutez vos propres dossiers d'inclusion dans les chemins de recherche d'en-tête, vous pouvez utiliser les crochets inclinés sans aucun problème.