Belle réponse que vous pouvez trouver dans le livre Learning Cocoa with Objective-C (ISBN: 978-1-491-90139-7)
Les modules sont un nouveau moyen d'inclure et de lier des fichiers et des bibliothèques dans vos projets. Pour comprendre le fonctionnement des modules et leurs avantages, il est important de revenir sur l'historique d'Objective-C et sur l'instruction #import. Chaque fois que vous souhaitez inclure un fichier à utiliser, vous aurez généralement du code qui ressemble à ceci:
#import "someFile.h"
Ou dans le cas des frameworks:
#import <SomeLibrary/SomeFile.h>
Parce que Objective-C est un sur-ensemble du langage de programmation C, la déclaration #import est un raffinement mineur de la #include
déclaration de C. L'instruction #include est très simple; il copie tout ce qu'il trouve dans le fichier inclus dans votre code lors de la compilation. Cela peut parfois provoquer des problèmes importants. Par exemple, imaginez que vous avez deux fichiers d'en-tête: SomeFileA.h
et SomeFileB.h
; SomeFileA.h
comprend SomeFileB.h
, et SomeFileB.h
comprend SomeFileA.h
. Cela crée une boucle et peut confondre le coimpilateur. Pour y faire face, les programmeurs C doivent écrire des protections contre ce type d'événement.
Lors de l'utilisation #import
, vous n'avez pas à vous soucier de ce problème ou à écrire des protections d'en-tête pour l'éviter. Cependant, ce #import
n'est encore qu'une action de copier-coller glorifiée, ce qui ralentit le temps de compilation parmi une foule d'autres problèmes plus petits mais toujours très dangereux (comme un fichier inclus remplaçant quelque chose que vous avez déclaré ailleurs dans votre propre code.)
Les modules tentent de contourner ce problème. Ils ne sont plus un copier-coller dans le code source, mais une représentation sérialisée des fichiers inclus qui peuvent être importés dans votre code source uniquement quand et où ils sont nécessaires. En utilisant des modules, le code se compilera généralement plus rapidement et sera plus sûr que d'utiliser #include ou #import
.
Revenons à l'exemple précédent d'importation d'un framework:
#import <SomeLibrary/SomeFile.h>
Pour importer cette bibliothèque en tant que module, le code serait changé en:
@import SomeLibrary;
Cela a l'avantage supplémentaire de Xcode reliant automatiquement le framework SomeLibrary au projet. Les modules vous permettent également d'inclure uniquement les composants dont vous avez vraiment besoin dans votre projet. Par exemple, si vous souhaitez utiliser le composant AwesomeObject dans le cadre AwesomeLibrary, vous devrez normalement tout importer juste pour utiliser la pièce unique. Cependant, à l'aide de modules, vous pouvez simplement importer l'objet spécifique que vous souhaitez utiliser:
@import AwesomeLibrary.AwesomeObject;
Pour tous les nouveaux projets réalisés dans Xcode 5, les modules sont activés par défaut. Si vous souhaitez utiliser des modules dans des projets plus anciens (et vous devriez vraiment le faire), ils devront être activés dans les paramètres de construction du projet. Une fois que vous avez fait cela, vous pouvez utiliser à la fois les instructions #import
et @import
dans votre code sans aucun problème.