Pergunta

Isto pode parecer uma pergunta muito estúpida, mas qual é o custo de incluir (na verdade, chamando #import) um arquivo de cabeçalho em Objective-C? Eu me canso de constantemente incluindo os mesmos cabeçalhos em vários locais, então eu decidi simplesmente criar um arquivo GlobalReferences.h que inclui vários cabeçalhos comumente referenciados.

Existe algum custo apreciável para incluir referências a outros arquivos, se eles não são usados ??mesmo? Meu instinto me diz "não" como parece que o ligador é feito apenas ciente de outros arquivos ao usar #import, mas eu não tinha certeza se considerações especiais devem ser tomadas para o desenvolvimento do iPhone, que é o que as minhas preocupações do projeto. Quaisquer pensamentos?

Foi útil?

Solução

O vinculador não sabe nada sobre arquivos #imported. Na verdade, o compilador Objective-C não sabe nada sobre eles também, eles são pré-processados ??pelo pré-processador. O pré-processador insere efetivamente o conteúdo dos cabeçalhos para o ponto que você incluiu no seu arquivo de origem. O compilador real Objective-C terá, então, para processar protótipos de funções extras e definições de interface classe, mesmo que eles não estão sendo usados. Embora este não é geralmente uma tarefa demorada, pode aumentar o tempo de compilação. O tamanho eo desempenho do seu aplicativo resultante não devem ser afectadas.

Para ver o que os olhares de código fonte raw como (incluindo todos os arquivos de cabeçalho e expandiu macros etc):

gcc -E your-source-file.m

Outras dicas

Importar / incluindo mais arquivos de cabeçalho do que você precisa irá aumentar o tempo de compilação. Você pode aliviar um pouco essa dor com cabeçalhos pré-compilados .

A maior desvantagem será em tempo de compilação. Se todos os seus cabeçalhos são importados em cada arquivo de origem, em seguida, o todo projeto terá de ser reconstruído cada vez que você faz uma alteração em um arquivo de cabeçalho.

Eu estava sob a impressão de que não seria muito de um sucesso: http://en.wikipedia.org/wiki/Objective-C#.23import

qual é o custo de incluir (na verdade, chamando #import) um arquivo de cabeçalho em Objective-C?

O compilador pode correr para ler esses arquivos desnecessariamente. Uma vez #imported, os arquivos adicionais terá de ser analisado, compilado, etc. para cada tradução (arquivo por exemplo .m) é visível na - fazendo sua compilação e link vezes muito mais tempo. 10 vezes mais tempo é não surpreendendo.

Eu me canso de constantemente incluindo os mesmos cabeçalhos em vários locais, então eu decidi simplesmente criar um arquivo GlobalReferences.h que inclui vários cabeçalhos comumente referenciados.

Normalmente, isso é uma abordagem muito ruim. O problema comum é que sempre que qualquer um dos arquivos incluídos por GlobalReferences.h for alterada, o seu projeto inteiro e tudo in-between dependências precisaria ser reconstruído, relinked, etc.

A minha preferência é separar programas em pequenas bibliotecas ou pacotes onde existe essa interdependência (por exemplo StoreKit.framework é um pequeno pacote / biblioteca) - mas enchendo essas bibliotecas / frameworks / pacotes em cabeçalhos não resolve nada. Além disso, declarações para a frente e armazenar seus dados na continuação classe ou @implementation pode reduzir significativamente dependências (porque você pode localizar a inclusão de uma biblioteca / cabeçalho apenas as traduções necessárias para).

Por fim, a limpeza após preguiçoso inclui é muito demorado, especialmente quando há muitos e você esperou até o tempo de construção do seu projeto estão insuportavelmente lento. Basicamente, você tem que voltar e escolher distante dependências desnecessárias, reconstruir, de repetição (por dias).

Existe algum custo apreciável para incluir referências a outros arquivos, se eles não são usados ??mesmo?

Absolutamente. Quanto maior os seus projectos crescer, a inclusão preguiçoso pior se torna. Alguns preguiçoso inclui em um grande projeto poderia adicionar dezenas ou centenas de milhares de linhas para a maioria de seus arquivos compilados, e pode desencadear recompilação freqüente de muitas fontes. Isso adiciona uma quantidade significativa de complexidade ao processo de construção - demandas de CPU vão maneira acima, o uso de RAM vai muito para cima, disco IO vai subir ... e novamente, isso se torna um problema maior como suas bases de código / projetos aumentam em complexidade

Vá em frente e fazê-lo. A menos que os cabeçalhos que você está incluindo são enormes e você não está usando cabeçalhos pré-compilados, você não deve ver qualquer diferença. Como já foi dito, #import é um pré-processador diretiva. Isto não tem qualquer consequência tempo de execução e, em muitos casos não é significativo tempo de compilação conseqüência.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top