#importar usando corchetes angulares <> y comillas ""

120

Me pregunto qué decide si tiene permitido usar <Header.h>o "Header.h"cuándo está importando archivos en Objective-C. Hasta ahora, mi observación ha sido que usa las comillas ""para los archivos en su proyecto para los que tiene la fuente de implementación y los corchetes angulares <>cuando hace referencia a una biblioteca o marco.

¿Pero cómo, exactamente, Cómo funciona eso? ¿Qué tendría que hacer para que mis propias clases usen los corchetes? En este momento, Xcode no me permitirá hacer eso con mis propios encabezados.

Además, al mirar los encabezados de algunos marcos, veo que los encabezados se refieren entre sí con <frameworkname/file.h>. ¿Cómo funciona eso ? Se parece mucho a los paquetes en Java, pero hasta donde yo sé, no existen paquetes en Objective-C.

quano
fuente

Respuestas:

122

Objective-C tiene esto en común con C / C ++; la forma entre comillas es para inclusiones "locales" de archivos (es necesario especificar la ruta relativa desde el archivo actual, por ejemplo #include "headers/my_header.h"), mientras que la forma entre corchetes es para inclusiones "globales", aquellas que se encuentran en algún lugar de la ruta de inclusión pasada a el compilador (por ejemplo #include <math.h>).

Entonces, para tener sus propios encabezados, < >no " "necesita pasar la ruta relativa o absoluta para su directorio de encabezado al compilador. Consulte "Cómo agregar una ruta de inclusión global para Xcode" para obtener información sobre cómo hacerlo en Xcode.

Consulte esta página de MSDN para obtener más información.

Mark Pim
fuente
1
Acabo de tener un problema con un proyecto de GitHub que hace referencia a AFNetworking como #import <AFNetworking / AFHTTPRequestOperationManager.h>, así que tuve que $ (SRCROOT) / lib / AFNetworking como ruta de búsqueda de encabezado. Debajo de esta carpeta hay otra carpeta llamada AFNetworking, que es como la importación con corchetes angulares la encuentra con esa ruta. Normalmente, #import "AFHTTPRequestOperationManager.h" funcionaría, pero para este proyecto solo hace referencia a él de manera diferente.
Brennan
Parece que la razón es la misma que para C / C ++. Los corchetes angulares (indicados por el símbolo <>) indican que la búsqueda de un archivo que no sea el directorio local actual, mientras que las comillas (indicadas por el símbolo "") indican que la búsqueda del archivo en el directorio local actual.
Jayprakash Dubey
El enlace al final de la respuesta está desactualizado.
Pang
14

En C, la convención es que los archivos de encabezado entre <>corchetes se buscan en los directorios del 'sistema' y ""en los directorios locales o de usuario.

La definición de sistema y local es un poco vaga, supongo. Creo que busca en los directorios del sistema en la ruta de inclusión o en CPPFLAGS para <header.h>, y en el directorio local o el directorio especificado con -I al compilador se buscan archivos "header.h".

Supongo que funciona de manera similar para Objective-C.

StefanB
fuente
6

Para importar sus propias clases usando "<>", debe poner los archivos de encabezado (* .h) en la carpeta lib del compilador o establecer VARIABLES DEL SISTEMA en su carpeta lib.

Rodrigo Reis
fuente
2

O configúrelo Always Search User Pathen YESpara que pueda usar corchetes angulares.

Ida88
fuente
1

Con paréntesis angulares, por ejemplo <Foundation/Foundation.h>, importa archivos de sistema.

Utiliza comillas dobles "Person.h"para importar archivos locales (archivos que usted creó) y para decirle al compilador dónde buscarlos.

soupwaylee
fuente
1

<Name.h>- Angle bracketsle dice al preprocesador que busque en un directorio especial del sistema pre-designado. Por ejemplo, importa encabezados de sistemas como <UIKit/UIKit.h>marcos o marcos agregados

"Name.h"- Quotation marksle dice al preprocesador que busque en un directorio actual . Si no se encuentra un encabezado, el preprocesador intenta usarlo <Name.h>. Por lo general, debe usarlo con los archivos de su proyecto.

yoAlex5
fuente
0

Acabo de tropezar con el mismo problema, hay 2 tipos de rutas de búsqueda en Xcode:

User Header Search Paths
Header Search Paths

Si agrega sus propias carpetas de inclusión en las rutas de búsqueda de encabezados, puede usar corchetes en ángulo sin ningún problema.

fatihk
fuente
-4

¿QUÉ ES HEADER FILE? Los archivos de encabezado contienen definiciones de funciones y variables que se pueden incorporar a cualquier programa en C utilizando la instrucción #include del preprocesador. Los archivos de encabezado estándar se proporcionan con cada compilador y cubren una variedad de áreas, manejo de cadenas, matemáticas, conversión de datos, impresión y lectura de variables. Ex- #include que contiene la información sobre la entrada como scanf (), y la salida como la función printf () y etc. en un compilador.

INCLUIR

1) #INCLUYE: - Es un preprocesador que procesa antes que el proceso de la función principal. El trabajo principal del preprocesador es inicializar el entorno del programa, es decir, que es el programa con el archivo de encabezado. 2) .h: - (Archivo de encabezado) Un archivo de encabezado es un archivo con la extensión .h que contiene declaraciones de funciones C y definiciones de macros y que se comparte entre varios archivos fuente. P) Hay dos tipos de archivos de encabezado: los archivos que escribe el programador y los archivos que vienen con su compilador. A) En corchetes angulares, la forma de corchetes angulares es para inclusiones "globales", aquellas que se encuentran en algún lugar de la ruta de inclusión pasada al compilador (por ejemplo, #include). Se usa para usar la función de biblioteca que está lista para definir en el compilador. En C, la convención es que los archivos de encabezado en <> corchete se buscan en 'sistema' directorios B) Comillas: - La forma entre comillas “header.h” es para inclusiones "locales" de archivos (es necesario especificar la ruta relativa del archivo actual, por ejemplo, #include "headers / my_header.h") En C, la convención es que los archivos de encabezado en "" se buscan en directorios de usuario o locales. En él un archivo para ser incluido en otro (INCLUSIÓN DE ARCHIVOS). Se puede usar en dos casos: Caso 1: Si tenemos un programa muy grande, es mejor dividir el código en varios archivos diferentes, cada uno con un conjunto de funciones relacionadas. Caso 2: Hay algunas funciones y definiciones de micros que necesitamos como máximo en todos los programas que escribimos. Ex ) En C, la convención es que los archivos de encabezado en "" se buscan en directorios de usuario o locales. En él un archivo para ser incluido en otro (INCLUSIÓN DE ARCHIVOS). Se puede usar en dos casos: Caso 1: Si tenemos un programa muy grande, es mejor dividir el código en varios archivos diferentes, cada uno con un conjunto de funciones relacionadas. Caso 2: Hay algunas funciones y definiciones de micros que necesitamos como máximo en todos los programas que escribimos. Ex ) En C, la convención es que los archivos de encabezado en "" se buscan en directorios de usuario o locales. En él un archivo para ser incluido en otro (INCLUSIÓN DE ARCHIVOS). Se puede usar en dos casos: Caso 1: Si tenemos un programa muy grande, es mejor dividir el código en varios archivos diferentes, cada uno con un conjunto de funciones relacionadas. Caso 2: Hay algunas funciones y definiciones de micros que necesitamos como máximo en todos los programas que escribimos. Ex

anitesh975
fuente