Хорошего ответа вы можете найти в книге обучения Какао с Objective-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
. Это создает петлю и может смущать coimpiler. Чтобы справиться с этим, программисты C должны писать защитные устройства против этого типа событий.
При использовании #import
вам не нужно беспокоиться об этой проблеме или писать защитные записи заголовков, чтобы избежать этого. Однако #import
по-прежнему является просто прославленным действием копирования и вставки, что приводит к медленному времени компиляции среди множества других небольших, но все еще очень опасных проблем (таких как включенный файл, переопределяющий то, что вы указали в другом месте вашего собственного кода.)
Модули - это попытка обойти это. Они больше не являются копией и вставкой в исходный код, а представляют собой сериализованное представление включенных файлов, которые могут быть импортированы в исходный код только тогда и там, где они необходимы. Используя модули, код, как правило, будет компилироваться быстрее и будет безопаснее, чем использование #include или #import
.
Возвращаясь к предыдущему примеру импорта рамки:
#import <SomeLibrary/SomeFile.h>
Чтобы импортировать эту библиотеку в качестве модуля, то код будет изменен на:
@import SomeLibrary;
Это имеет дополнительный бонус в Xcode автоматически привязывая структуру SomeLibrary к проекту. Модули также позволяют включать только те компоненты, которые вам действительно нужны в ваш проект. Например, если вы хотите использовать компонент AwesomeObject в структуре AwesomeLibrary, обычно вам придется импортировать все, чтобы использовать только одну часть. Тем не менее, с помощью модулей, вы можете просто импортировать конкретный объект, который вы хотите использовать:
@import AwesomeLibrary.AwesomeObject;
Для всех новых проектов, выполненных в Xcode 5, модули включены по умолчанию. Если вы хотите использовать модули в более старых проектах (и вы действительно должны), они должны быть включены в настройках сборки проекта. Как только вы это сделаете, вы можете использовать как операторы #import
, так и @import
в коде вместе без каких-либо проблем.
http://stackoverflow.com/questions/29701647/use- of-import-when-modules-are-disabled –
http://stackoverflow.com/questions/29701647/use-of-import-when-modules-are-disabled –