Bella risposta che puoi trovare nel libro Learning Cocoa con Objective-C (ISBN: 978-1-491-90139-7)
I moduli sono un nuovo mezzo per includere e collegare file e librerie nei tuoi progetti. Per capire come funzionano i moduli e quali vantaggi hanno, è importante guardare indietro alla storia di Objective-C e la dichiarazione #import Ogni volta che si desidera includere un file da utilizzare, in genere si avrà un codice simile al seguente:
#import "someFile.h"
O nel caso di quadri:
#import <SomeLibrary/SomeFile.h>
Poiché Objective-C è un superset del linguaggio di programmazione C, l' #include
affermazione #import è un raffinamento minore sull'affermazione di C. L'affermazione #include è molto semplice; copia tutto ciò che trova nel file incluso nel codice durante la compilazione. Questo a volte può causare problemi significativi. Ad esempio, immagina di avere due file di intestazione: SomeFileA.h
e SomeFileB.h
; SomeFileA.h
include SomeFileB.h
e SomeFileB.h
include SomeFileA.h
. Questo crea un ciclo e può confondere il coimpiler. Per far fronte a questo, i programmatori C devono scrivere protezioni contro questo tipo di evento.
Durante l'utilizzo #import
, non è necessario preoccuparsi di questo problema o scrivere le protezioni delle intestazioni per evitarlo. Tuttavia, #import
è ancora solo un'azione glorificata di copia e incolla, che causa tempi di compilazione lenti tra una serie di altri problemi più piccoli ma ancora molto pericolosi (come un file incluso che sostituisce qualcosa che hai dichiarato altrove nel tuo codice).
I moduli sono un tentativo di aggirare questo. Non sono più una copia e incolla nel codice sorgente, ma una rappresentazione serializzata dei file inclusi che possono essere importati nel codice sorgente solo quando e dove sono necessari. Usando i moduli, il codice generalmente si compila più velocemente ed è più sicuro dell'uso di #include o #import
.
Tornando all'esempio precedente di importazione di un framework:
#import <SomeLibrary/SomeFile.h>
Per importare questa libreria come modulo, il codice verrebbe modificato in:
@import SomeLibrary;
Questo ha l'ulteriore vantaggio di Xcode che collega automaticamente il framework SomeLibrary al progetto. I moduli ti consentono anche di includere solo i componenti di cui hai veramente bisogno nel tuo progetto. Ad esempio, se si desidera utilizzare il componente AwesomeObject nel framework AwesomeLibrary, normalmente è necessario importare tutto solo per utilizzare il pezzo unico. Tuttavia, utilizzando i moduli, puoi semplicemente importare l'oggetto specifico che desideri utilizzare:
@import AwesomeLibrary.AwesomeObject;
Per tutti i nuovi progetti realizzati in Xcode 5, i moduli sono abilitati per impostazione predefinita. Se vuoi usare i moduli in progetti più vecchi (e dovresti davvero) dovranno essere abilitati nelle impostazioni di compilazione del progetto. Una volta che lo fai, puoi usare entrambe #import
e le @import
istruzioni nel tuo codice insieme senza alcuna preoccupazione.