Boa resposta que você pode encontrar no livro Learning Cocoa with Objective-C (ISBN: 978-1-491-90139-7)
Os módulos são um novo meio de incluir e vincular arquivos e bibliotecas em seus projetos. Para entender como os módulos funcionam e quais benefícios eles têm, é importante relembrar o histórico do Objective-C e a instrução #import Sempre que você desejar incluir um arquivo para uso, geralmente haverá um código semelhante a este:
#import "someFile.h"
Ou no caso de frameworks:
#import <SomeLibrary/SomeFile.h>
Como o Objective-C é um superconjunto da linguagem de programação C, a declaração #import é um refinamento menor na #include
declaração de C. A instrução #include é muito simples; copia tudo o que encontra no arquivo incluído no seu código durante a compilação. Às vezes, isso pode causar problemas significativos. Por exemplo, imagine que você tenha dois arquivos de cabeçalho: SomeFileA.h
e SomeFileB.h
; SomeFileA.h
inclui SomeFileB.h
e SomeFileB.h
inclui SomeFileA.h
. Isso cria um loop e pode confundir o coimpiler. Para lidar com isso, os programadores C precisam escrever proteções contra esse tipo de evento.
Ao usar #import
, você não precisa se preocupar com esse problema ou escrever protetores de cabeçalho para evitá-lo. No entanto, #import
ainda é apenas uma ação gloriosa de copiar e colar, causando um tempo de compilação lento entre uma série de outros problemas menores, mas ainda muito perigosos (como um arquivo incluído substituindo algo que você declarou em outro lugar no seu próprio código).
Módulos são uma tentativa de contornar isso. Eles não são mais um copiar e colar no código fonte, mas uma representação serializada dos arquivos incluídos que podem ser importados para o código-fonte somente quando e onde forem necessários. Usando módulos, o código geralmente compila mais rápido e é mais seguro do que usar #include ou #import
.
Retornando ao exemplo anterior de importação de uma estrutura:
#import <SomeLibrary/SomeFile.h>
Para importar esta biblioteca como um módulo, o código seria alterado para:
@import SomeLibrary;
Isso tem o bônus adicional do Xcode vinculando a estrutura SomeLibrary ao projeto automaticamente. Os módulos também permitem incluir apenas os componentes que você realmente precisa em seu projeto. Por exemplo, se você quiser usar o componente AwesomeObject na estrutura AwesomeLibrary, normalmente precisará importar tudo apenas para usar a peça única. No entanto, usando módulos, você pode apenas importar o objeto específico que deseja usar:
@import AwesomeLibrary.AwesomeObject;
Para todos os novos projetos feitos no Xcode 5, os módulos são ativados por padrão. Se você quiser usar módulos em projetos mais antigos (e realmente deve), eles deverão ser ativados nas configurações de compilação do projeto. Depois de fazer isso, você pode usar as instruções #import
e @import
no seu código juntas sem nenhuma preocupação.