Гарну відповідь ви можете знайти в книзі «Навчання какао з ціллю-C» (ISBN: 978-1-491-90139-7)
Модулі - це новий засіб включення та з'єднання файлів і бібліотек у ваші проекти. Щоб зрозуміти, як працюють модулі та які переваги вони мають, важливо зазирнути назад в історію Objective-C та оператор #import Кожен раз, коли ви хочете включити файл для використання, як правило, ви маєте такий код, який виглядає приблизно так:
#import "someFile.h"
Або у випадку з рамками:
#import <SomeLibrary/SomeFile.h>
Оскільки Objective-C є набором мови програмування C, #import #include
заява є незначним уточненням заяви C. Заява #include дуже проста; він копіює все, що знаходиться у включеному файлі, у ваш код під час компіляції. Іноді це може спричинити значні проблеми. Наприклад, уявіть, що у вас є два файли заголовка: SomeFileA.h
і SomeFileB.h
; SomeFileA.h
включає SomeFileB.h
і SomeFileB.h
включає SomeFileA.h
. Це створює цикл і може переплутати коімпілер. Щоб вирішити це, програмістам C доводиться писати запобіжники проти подібних подій.
Під час використання #import
вам не потрібно хвилюватися з приводу цієї проблеми або писати заголовки заголовків, щоб уникнути цього. Однак #import
це все-таки лише прославлена дія копіювання та вставки, що спричиняє повільний час компіляції серед безлічі інших менших, але все ще дуже небезпечних проблем (наприклад, включений файл, що перекриває щось, про що ви заявили десь у власному коді.)
Модулі - це спроба обійти це. Вони більше не є копіюванням та вставкою у вихідний код, а серійним поданням включених файлів, які можна імпортувати у ваш вихідний код лише тоді, коли та де вони потрібні. Використовуючи модулі, код, як правило, компілюється швидше і є безпечнішим, ніж використання #include або #import
.
Повернення до попереднього прикладу імпорту рамки:
#import <SomeLibrary/SomeFile.h>
Щоб імпортувати цю бібліотеку як модуль, код буде змінено на:
@import SomeLibrary;
Це має додатковий бонус Xcode, який автоматично пов'язує рамки SomeLibrary в проект. Модулі також дозволяють включати в проект лише ті компоненти, які вам справді потрібні. Наприклад, якщо ви хочете використовувати компонент AwesomeObject в рамках AwesomeLibrary, зазвичай вам доведеться імпортувати все лише для використання одного елемента. Однак, використовуючи модулі, ви можете просто імпортувати конкретний об'єкт, який ви хочете використовувати:
@import AwesomeLibrary.AwesomeObject;
Для всіх нових проектів, зроблених у Xcode 5, модулі включені за замовчуванням. Якщо ви хочете використовувати модулі в старих проектах (і вам справді слід), їх потрібно буде включити в налаштуваннях проекту. Після цього ви можете без перешкод використовувати разом #import
і @import
виписки у своєму коді.