#import utilizzando parentesi angolari <> e virgolette ""


120

Mi chiedo cosa decida se sei autorizzato a usare <Header.h>o "Header.h"quando importi file in Objective-C. Finora la mia osservazione è stata che usi le virgolette ""per i file nel tuo progetto di cui hai l'origine dell'implementazione e le parentesi angolari <>quando fai riferimento a una libreria o un framework.

Ma come funziona esattamente? Cosa dovrei fare per fare in modo che le mie classi utilizzino le parentesi? In questo momento Xcode non mi consente di farlo per le mie intestazioni.

Inoltre, osservando le intestazioni di alcuni framework, vedo che le intestazioni si riferiscono a vicenda con <frameworkname/file.h>. Come funziona quel lavoro? Assomiglia molto ai pacchetti in Java, ma per quanto ne so, non esiste un pacchetto in Objective-C.

Risposte:


122

Objective-C ha questo in comune con C / C ++; la forma tra virgolette è per gli include "locali" dei file (è necessario specificare il percorso relativo dal file corrente, ad esempio #include "headers/my_header.h"), mentre la forma delle parentesi angolari è per gli include "globali" - quelli trovati da qualche parte nel percorso di inclusione passato a il compilatore (ad esempio #include <math.h>).

Quindi, per utilizzare le proprie intestazioni, < >non " "è necessario passare il percorso relativo o assoluto per la directory dell'intestazione al compilatore. Vedi "Come aggiungere un percorso di inclusione globale per Xcode" per informazioni su come farlo in Xcode.

Vedi questa pagina MSDN per maggiori informazioni.


1
Ho appena avuto un problema con un progetto GitHub che fa riferimento a AFNetworking come #import <AFNetworking / AFHTTPRequestOperationManager.h> quindi ho dovuto $ (SRCROOT) / lib / AFNetworking come percorso di ricerca dell'intestazione. Sotto questa cartella c'è un'altra cartella denominata AFNetworking che è il modo in cui l'importazione con parentesi angolari la trova con quel percorso. Normalmente #import "AFHTTPRequestOperationManager.h" funzionerebbe ma per questo progetto lo fa semplicemente riferimento in modo diverso.
Brennan

Sembra che il motivo sia lo stesso di C / C ++. La parentesi angolare (indicata dal simbolo <>) indica che la ricerca di file è diversa dalla directory locale corrente mentre le virgolette (indicate dal simbolo "") indicano la ricerca di file nella directory locale corrente.
Jayprakash Dubey

Il link alla fine della risposta è obsoleto.
Pang

14

In C, la convenzione è che i file di intestazione tra <>parentesi siano cercati nelle directory "di sistema" e ""nelle directory utente o locali.

La definizione di sistema e locale è un po 'vaga, immagino. Credo che cerchi nelle directory di sistema in include path o in CPPFLAGS <header.h> e nella directory locale o nella directory specificata con -I al compilatore vengono cercati i file "header.h".

Presumo che funzioni in modo simile per Objective-C.


6

Per importare le tue classi usando "<>" devi mettere i file header (* .h) nella cartella lib del compilatore o impostare un collegamento SYSTEM VARIABLES alla tua cartella lib.


2

Oppure impostare Always Search User Pathsu in YESmodo da poter utilizzare le parentesi angolari.


1

Con le parentesi angolari, ad esempio <Foundation/Foundation.h>, importi i file di sistema.

Usa le virgolette "Person.h"per importare i file locali (file che hai creato) e per dire al compilatore dove cercarli.


1

<Name.h>- Angle bracketsdice al preprocessore di cercare nelle directory di uno speciale sistema pre-designato. Ad esempio, importi intestazioni di sistema come<UIKit/UIKit.h> o framework aggiunti

"Name.h"- Quotation marksdice al preprocessore di cercare in una directory corrente . Se un'intestazione non è stata trovata, il preprocessore prova a usare <Name.h>. Di solito dovresti usarlo con i file del tuo progetto


0

Sono appena incappato nello stesso problema, ci sono 2 tipi di percorsi di ricerca Xcode:

User Header Search Paths
Header Search Paths

Se aggiungi le tue cartelle di inclusione nei percorsi di ricerca delle intestazioni, puoi utilizzare le parentesi angolate senza alcun problema.


-4

CHE COS'È IL FILE DI INTESTAZIONE? I file di intestazione contengono definizioni di funzioni e variabili che possono essere incorporate in qualsiasi programma C utilizzando l'istruzione #include del pre-processore. I file di intestazione standard sono forniti con ogni compilatore e coprono una gamma di aree, gestione delle stringhe, matematica, conversione dei dati, stampa e lettura di variabili. Ex- #include contiene le informazioni sull'input come scanf (), e sull'output come la funzione printf () e così via in un compilatore.

INCLUDERE

1) #INCLUDE: - È un pre-processore che elabora prima del processo della funzione principale. Il lavoro principale del pre-processore è inizializzare l'ambiente del programma, ovvero il programma con il file di intestazione. 2) .h: - (File di intestazione) Un file di intestazione è un file con estensione .h che contiene dichiarazioni di funzioni C e definizioni di macro e da condividere tra diversi file sorgente. D) Esistono due tipi di file di intestazione: i file che scrive il programmatore e i file forniti con il compilatore? A) In parentesi angolari la forma delle parentesi angolari è per gli include "globali" - quelli che si trovano da qualche parte nel percorso di inclusione passato al compilatore (ad esempio #include) Viene utilizzato per l'utilizzo della funzione di libreria che è già definita nel compilatore. In C la convenzione è che i file di intestazione tra parentesi <> vengono cercati in 'sistema' directory B) Virgolette: - la forma "header.h" tra virgolette indica gli include "locali" di file (è necessario specificare il percorso relativo dal file corrente, ad esempio #include "headers / my_header.h") In C la convenzione è che i file di intestazione in "" vengono cercati nelle directory dell'utente o locale. In esso un file da includere in un altro (INCLUSIONE FILE). Può essere utilizzato in due casi: Caso 1: se abbiamo un programma molto grande, il codice è meglio diviso in diversi file diversi, ciascuno contenente un insieme di funzioni correlate. Caso 2: ci sono alcune funzioni e definizioni di micro di cui abbiamo bisogno al massimo in tutti i programmi che scriviamo. Ex ) In C la convenzione è che i file di intestazione in "" vengono cercati nelle directory utente o locali. In esso un file da includere in un altro (INCLUSIONE FILE). Può essere utilizzato in due casi: Caso 1: se abbiamo un programma molto grande, il codice è meglio diviso in diversi file diversi, ciascuno contenente un insieme di funzioni correlate. Caso 2: ci sono alcune funzioni e definizioni di micro di cui abbiamo bisogno al massimo in tutti i programmi che scriviamo. Ex ) In C la convenzione è che i file di intestazione in "" vengono cercati nelle directory utente o locali. In esso un file da includere in un altro (INCLUSIONE FILE). Può essere utilizzato in due casi: Caso 1: se abbiamo un programma molto grande, il codice è meglio diviso in diversi file diversi, ciascuno contenente un insieme di funzioni correlate. Caso 2: ci sono alcune funzioni e definizioni di micro di cui abbiamo bisogno al massimo in tutti i programmi che scriviamo. Ex

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.