Schöne Antwort finden Sie im Buch Learning Cocoa with Objective-C (ISBN: 978-1-491-90139-7)
Module sind ein neues Mittel, um Dateien und Bibliotheken in Ihre Projekte einzuschließen und zu verknüpfen. Um zu verstehen, wie Module funktionieren und welche Vorteile sie haben, ist es wichtig, einen Blick in die Geschichte von Objective-C und das #import Statement zu werfen. Wenn Sie eine Datei für die Verwendung einbeziehen möchten, haben Sie in der Regel etwas Code, der wie folgt aussieht:
#import "someFile.h"
Oder im Falle von Frameworks:
#import
Weil Objective-C eine Erweiterung der C-Programmiersprache ist, ist das #import Statement eine kleine Verfeinerung des #include
Statements in C. Das #include Statement ist sehr einfach; es kopiert alles, was es in der inkludierten Datei findet, während der Kompilierung in Ihren Code. Dies kann manchmal zu erheblichen Problemen führen. Beispielsweise, stellen Sie sich vor, Sie haben zwei Header-Dateien: SomeFileA.h
und SomeFileB.h
; SomeFileA.h
inkludiert SomeFileB.h
, und SomeFileB.h
inkludiert SomeFileA.h
. Dies erzeugt eine Schleife und kann den Compiler verwirren. Um damit umzugehen, müssen C-Programmierer Schutzvorrichtungen gegen dieses Art von Ereignis schreiben.
Bei Verwendung von #import
müssen Sie sich keine Sorgen um dieses Problem machen oder Schutzvorrichtungen schreiben, um es zu vermeiden. Allerdings ist #import
immer noch nur eine glorifizierte Kopier- und Einfügeaktion, die zu langsamer Kompilierungszeit und einer Vielzahl anderer kleinerer, aber dennoch sehr gefährlicher Probleme führt (wie etwa eine inkludierte Datei, die etwas überschreibt, was Sie anderswo in Ihrem eigenen Code deklariert haben.)
Module sind ein Versuch, dieses Problem zu umgehen. Sie sind nicht länger eine Kopier- und Einfügeaktion in den Quellcode, sondern eine serialisierte Darstellung der inkludierten Dateien, die nur dort und dann in Ihren Quellcode importiert werden können, wo sie benötigt werden. Durch die Verwendung von Modulen wird der Code in der Regel schneller kompiliert und sicherer sein als die Verwendung von #include oder #import
.
Zurück zum vorherigen Beispiel des Imports eines Frameworks:
#import
Um diese Bibliothek als Modul zu importieren, würde der Code geändert werden zu:
@import SomeLibrary;
Dies hat den zusätzlichen Vorteil, dass Xcode automatisch das SomeLibrary Framework in das Projekt einbindet. Module ermöglichen es auch, nur die Komponenten, die Sie wirklich in Ihr Projekt einbeziehen möchten. Wenn Sie beispielsweise das AwesomeObject-Modul im AwesomeLibrary-Framework verwenden möchten, müssten Sie normalerweise alles importieren, nur um das eine Stück zu verwenden. Durch die Verwendung von Modulen können Sie jedoch nur das spezifische Objekt importieren, das Sie verwenden möchten:
@import AwesomeLibrary.AwesomeObject;
Für alle neuen Projekte, die in Xcode 5 erstellt wurden, sind Module standardmäßig aktiviert. Wenn Sie Module in älteren Projekten verwenden möchten (und das sollten Sie wirklich), müssen sie in den Build-Einstellungen des Projekts aktiviert werden. Sobald Sie das getan haben, können Sie sowohl #import
als auch @import
Statements in Ihrem Code verwenden, ohne sich Gedanken machen zu müssen.