#importar usando colchetes angulares <> e aspas “”

120

Estou me perguntando o que decide se você tem permissão para usar <Header.h>ou "Header.h"quando você está importando arquivos em Objective-C. Até agora, minha observação foi que você usa aspas ""para arquivos em seu projeto para os quais você obteve a fonte de implementação e colchetes <>quando está fazendo referência a uma biblioteca ou estrutura.

Mas como, exatamente, é que isso funciona? O que eu teria que fazer para que minhas próprias classes usassem os colchetes? No momento, o Xcode não me permite fazer isso com meus próprios cabeçalhos.

Além disso, olhando em alguns cabeçalhos de frameworks, vejo que os cabeçalhos fazem referência uns aos outros com <frameworkname/file.h>. Como isso funciona? Parece muito com pacotes em Java, mas até onde eu sei, não existe um pacote em Objective-C.

quano
fonte

Respostas:

122

Objective-C tem isso em comum com C / C ++; a forma entre aspas é para inclusões "locais" de arquivos (você precisa especificar o caminho relativo do arquivo atual, por exemplo #include "headers/my_header.h"), enquanto a forma de colchetes é para inclusões "globais" - aquelas encontradas em algum lugar no caminho de inclusão passado para o compilador (por exemplo #include <math.h>).

Então, para ter seus próprios cabeçalhos, < >não use" " você precisa passar o caminho relativo ou absoluto para o diretório do cabeçalho para o compilador. Consulte "Como adicionar um caminho de inclusão global para o Xcode" para obter informações sobre como fazer isso no Xcode.

Veja esta página do MSDN para mais informações.

Mark Pim
fonte
1
Acabei de ter um problema com um projeto GitHub referenciando AFNetworking como #import <AFNetworking / AFHTTPRequestOperationManager.h> então tive que $ (SRCROOT) / lib / AFNetworking como um caminho de pesquisa de cabeçalho. Sob esta pasta está outra pasta chamada AFNetworking, que é como a importação com colchetes angulares a encontra com esse caminho. Normalmente #import "AFHTTPRequestOperationManager.h" funcionaria, mas para este projeto ele apenas faz referência a ele de forma diferente.
Brennan
Parece que o motivo é o mesmo do C / C ++. O colchete angular (denotado pelo símbolo <>) indica que a pesquisa por arquivo diferente do diretório local atual, enquanto as aspas (denotadas pelo símbolo "") indicam a pesquisa por arquivo no diretório local atual.
Jayprakash Dubey
O link no final da resposta está desatualizado.
Pang
14

Em C, a convenção é que os arquivos de cabeçalho entre <>colchetes são pesquisados ​​nos diretórios do 'sistema' e ""nos diretórios do usuário ou locais.

A definição de sistema e local é um pouco vaga, eu acho. Acredito que ele procure nos diretórios do sistema em incluir caminho ou em CPPFLAGS por <header.h>, e o diretório local ou o diretório especificado com -I para o compilador são pesquisados ​​por arquivos "header.h".

Presumo que funcione de forma semelhante para Objective-C.

StefanB
fonte
6

Para importar suas próprias classes usando "<>" você deve colocar os arquivos de cabeçalho (* .h) na pasta lib do compilador ou definir um ponto de SYSTEM VARIABLES para sua pasta lib.

Rodrigo Reis
fonte
2

Ou defina Always Search User Pathcomo YESpara que você possa usar colchetes angulares.

Ida88
fonte
1

Com colchetes angulares, por exemplo, <Foundation/Foundation.h>você importa arquivos de sistema.

Use aspas duplas "Person.h"para importar arquivos locais (arquivos que você criou) e para dizer ao compilador onde procurá-los.

Sopawaylee
fonte
1

<Name.h>- Angle bracketsdiz ao pré-processador para pesquisar nos diretórios de um sistema pré-designado especial . Por exemplo, você importa cabeçalhos de sistemas como <UIKit/UIKit.h>ou estruturas adicionadas

"Name.h"- Quotation marksdiz ao pré-processador para pesquisar em um diretório atual . Se um cabeçalho não for encontrado, o pré-processador tenta usá-lo <Name.h>. Normalmente você deve usá-lo com os arquivos do seu projeto

yoAlex5
fonte
0

Acabei de topar com o mesmo problema, existem 2 tipos de caminhos de pesquisa no Xcode:

User Header Search Paths
Header Search Paths

Se você adicionar suas próprias pastas de inclusão em Caminhos de pesquisa de cabeçalho, poderá usar colchetes angulares sem nenhum problema.

fatihk
fonte
-4

O QUE É HEADER FILE? Os arquivos de cabeçalho contêm definições de funções e variáveis ​​que podem ser incorporadas a qualquer programa C usando a instrução #include do pré-processador. Arquivos de cabeçalho padrão são fornecidos com cada compilador e cobrem uma variedade de áreas, manuseio de strings, matemática, conversão de dados, impressão e leitura de variáveis. Ex- #include contém as informações sobre entrada como scanf () e saída como função printf () e etc em um compilador.

INCLUIR

1) #INCLUDE: - É um pré-processador que processa antes do processo da função principal. O principal trabalho do pré-processador é inicializar o ambiente do programa, isto é, o programa com o arquivo de cabeçalho. 2) .h: - (Arquivo de cabeçalho) Um arquivo de cabeçalho é um arquivo com extensão .h que contém declarações de funções C e definições de macro e deve ser compartilhado entre vários arquivos de origem. Q) Existem dois tipos de arquivos de cabeçalho: os arquivos que o programador grava e os arquivos que vêm com o seu compilador? A) Em colchetes angulares A forma de colchetes angulares é para inclusões "globais" - aquelas encontradas em algum lugar no caminho de inclusão passado para o compilador (por exemplo, #include). É usado para usar a função de biblioteca que está pronta para ser definida no compilador. Em C, a convenção é que os arquivos de cabeçalho entre <> colchetes são pesquisados ​​em 'sistema' diretórios B) Aspas: - a forma de aspas “header.h” é para inclusões "locais" de arquivos (você precisa especificar o caminho relativo do arquivo atual, por exemplo, #include "headers / my_header.h") Em C, a convenção é que os arquivos de cabeçalho em "" são pesquisados ​​nos diretórios do usuário ou locais. Nele um arquivo para ser incluído em outro. (INCLUSÃO DE ARQUIVOS). Pode ser usado em dois casos: Caso 1: se tivermos um programa muito grande, o código será melhor dividido em vários arquivos diferentes, cada um contendo um conjunto de funções relacionadas. Caso 2: Existem algumas funções e definições de micros que precisamos no máximo em todos os programas que escrevemos. Ex ) Em C, a convenção é que os arquivos de cabeçalho em "" são pesquisados ​​nos diretórios do usuário ou locais. Nele um arquivo para ser incluído em outro. (INCLUSÃO DE ARQUIVOS). Pode ser usado em dois casos: Caso 1: se tivermos um programa muito grande, o código será melhor dividido em vários arquivos diferentes, cada um contendo um conjunto de funções relacionadas. Caso 2: Existem algumas funções e definições de micros que precisamos no máximo em todos os programas que escrevemos. Ex ) Em C, a convenção é que os arquivos de cabeçalho em "" são pesquisados ​​nos diretórios do usuário ou locais. Nele um arquivo para ser incluído em outro. (INCLUSÃO DE ARQUIVOS). Pode ser usado em dois casos: Caso 1: se tivermos um programa muito grande, o código será melhor dividido em vários arquivos diferentes, cada um contendo um conjunto de funções relacionadas. Caso 2: Existem algumas funções e definições de micros que precisamos no máximo em todos os programas que escrevemos. Ex

anitesh975
fonte