Schöne Antwort finden Sie im Buch Learning Cocoa with Objective-C (ISBN: 978-1-491-90139-7)
Module sind eine neue Möglichkeit, Dateien und Bibliotheken in Ihre Projekte aufzunehmen und zu verknüpfen. Um zu verstehen, wie Module funktionieren und welche Vorteile sie haben, ist es wichtig, einen Blick auf den Verlauf von Objective-C und die # import-Anweisung zu werfen. Wenn Sie eine Datei zur Verwendung einschließen möchten, haben Sie im Allgemeinen einen Code, der folgendermaßen aussieht:
#import "someFile.h"
Oder bei Frameworks:
#import <SomeLibrary/SomeFile.h>
Da Objective-C eine Obermenge der Programmiersprache C ist, ist die Anweisung #import eine geringfügige Verfeinerung der #include
Aussage von C. Die Anweisung #include ist sehr einfach. Es kopiert alles, was es in der enthaltenen Datei findet, während der Kompilierung in Ihren Code. Dies kann manchmal erhebliche Probleme verursachen. Stellen Sie sich zum Beispiel vor, Sie haben zwei Header-Dateien: SomeFileA.h
und SomeFileB.h
; SomeFileA.h
enthält SomeFileB.h
und SomeFileB.h
enthält SomeFileA.h
. Dies erzeugt eine Schleife und kann den Coimpiler verwirren. Um dies zu bewältigen, müssen C-Programmierer Schutzmaßnahmen gegen das Auftreten dieser Art von Ereignissen schreiben.
Bei der Verwendung #import
müssen Sie sich nicht um dieses Problem kümmern oder Header-Schutzfunktionen schreiben, um dies zu vermeiden. Es handelt sich jedoch #import
immer noch nur um eine verherrlichte Aktion zum Kopieren und Einfügen, die eine langsame Kompilierungszeit bei einer Vielzahl anderer kleinerer, aber immer noch sehr gefährlicher Probleme verursacht (z. B. eine enthaltene Datei, die etwas überschreibt, das Sie an anderer Stelle in Ihrem eigenen Code deklariert haben).
Module sind ein Versuch, dies zu umgehen. Sie sind nicht länger ein Kopieren und Einfügen in den Quellcode, sondern eine serialisierte Darstellung der enthaltenen Dateien, die nur dann in Ihren Quellcode importiert werden können, wenn und wo sie benötigt werden. Durch die Verwendung von Modulen wird Code im Allgemeinen schneller kompiliert und ist sicherer als die Verwendung von #include oder #import
.
Zurück zum vorherigen Beispiel für den Import eines Frameworks:
#import <SomeLibrary/SomeFile.h>
Um diese Bibliothek als Modul zu importieren, wird der Code wie folgt geändert:
@import SomeLibrary;
Dies hat den zusätzlichen Vorteil, dass Xcode das SomeLibrary-Framework automatisch mit dem Projekt verknüpft. Mit Modulen können Sie auch nur die Komponenten, die Sie wirklich benötigen, in Ihr Projekt einbeziehen. Wenn Sie beispielsweise die AwesomeObject-Komponente im AwesomeLibrary-Framework verwenden möchten, müssen Sie normalerweise alles importieren, um nur das eine Stück zu verwenden. Mithilfe von Modulen können Sie jedoch nur das spezifische Objekt importieren, das Sie verwenden möchten:
@import AwesomeLibrary.AwesomeObject;
Für alle neuen Projekte in Xcode 5 sind Module standardmäßig aktiviert. Wenn Sie Module in älteren Projekten verwenden möchten (und dies sollten Sie auch tun), müssen diese in den Build-Einstellungen des Projekts aktiviert sein. Sobald Sie dies getan haben, können Sie beide #import
und @import
Anweisungen in Ihrem Code ohne Bedenken zusammen verwenden.