web-dev-qa-db-fra.com

#import en utilisant les crochets <> et les guillemets ""

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.

109
quano

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.

111
Mark Pim

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.

13
stefanB

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.

6
Rodrigo Reis

Ou définissez Always Search User Path sur YES pour pouvoir utiliser des crochets.

2
Ida88

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.

1
soupwaylee

"" - 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

0
yoAlex5

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.

0
fatihk