Buena respuesta que puedes encontrar en el libro Learning Cocoa with Objective-C (ISBN: 978-1-491-90139-7)
Los módulos son un nuevo medio para incluir y vincular archivos y bibliotecas en sus proyectos. Para comprender cómo funcionan los módulos y qué beneficios tienen, es importante revisar el historial de Objective-C y la declaración #import. Siempre que desee incluir un archivo para su uso, generalmente tendrá un código similar al siguiente:
#import "someFile.h"
O en el caso de los marcos:
#import <SomeLibrary/SomeFile.h>
Debido a que Objective-C es un superconjunto del lenguaje de programación C, la declaración #import es un refinamiento menor en la #include
declaración de C. La declaración #include es muy simple; copia todo lo que encuentra en el archivo incluido en su código durante la compilación. Esto a veces puede causar problemas importantes. Por ejemplo, imagine que tiene dos archivos de encabezado: SomeFileA.h
y SomeFileB.h
; SomeFileA.h
incluye SomeFileB.h
, e SomeFileB.h
incluye SomeFileA.h
. Esto crea un bucle y puede confundir al coimpiler. Para lidiar con esto, los programadores de C tienen que escribir guardias contra este tipo de evento.
Al usarlo #import
, no necesita preocuparse por este problema o escribir protectores de encabezado para evitarlo. Sin embargo, #import
sigue siendo solo una acción glorificada de copiar y pegar, lo que causa un tiempo de compilación lento entre una serie de otros problemas más pequeños pero aún muy peligrosos (como un archivo incluido que anula algo que ha declarado en otro lugar en su propio código).
Los módulos son un intento de evitar esto. Ya no son una copia y pega en el código fuente, sino una representación serializada de los archivos incluidos que pueden importarse a su código fuente solo cuando y donde se necesitan. Al usar módulos, el código generalmente se compilará más rápido y será más seguro que usar #include o #import
.
Volviendo al ejemplo anterior de importación de un marco:
#import <SomeLibrary/SomeFile.h>
Para importar esta biblioteca como un módulo, el código se cambiaría a:
@import SomeLibrary;
Esto tiene la ventaja adicional de que Xcode vincula el marco SomeLibrary al proyecto automáticamente. Los módulos también le permiten incluir solo los componentes que realmente necesita en su proyecto. Por ejemplo, si desea usar el componente AwesomeObject en el marco AwesomeLibrary, normalmente tendría que importar todo solo para usar la pieza única. Sin embargo, al usar módulos, puede importar el objeto específico que desea usar:
@import AwesomeLibrary.AwesomeObject;
Para todos los proyectos nuevos realizados en Xcode 5, los módulos están habilitados de forma predeterminada. Si desea utilizar módulos en proyectos más antiguos (y realmente debería hacerlo), deberá habilitarlos en la configuración de compilación del proyecto. Una vez que haga eso, puede usar ambos #import
y las @import
declaraciones en su código juntos sin ninguna preocupación.