2013-04-28 2 views
0

Я пытаюсь понять, что на самом деле происходит во время компиляции и времени выполнения с импортированными файлами.Включает ли Objective-C весь #imported файл?

Директива #import "file.h" по существу копирует и вставляет весь file.m в текущий файл? Или он просто указывает местоположение этого файла и создает необходимые атрибуты по мере их создания?

ответ

1

Выполняет ли #import file.h заявление в основном копировать и вставлять весь файл.m в текущий файл?

  1. Это не утверждение, это директива препроцессора.

  2. У вас отсутствуют котировки или угловые скобки вокруг имени файла.

  3. #import "file.h"делает действительно скопировать весь файл file.h вместо этой директивы в текущий файл. Однако он ничего не делает с file.m.

+0

отредактирована для правильной грамматики. Теперь, как компилятор загружает 'methodFromFile'? Спрашивает ли он определение и когда оно создается при вызове или было ли оно уже в памяти с момента объявления объявления #import_directive_? – user

+1

@ 123 Я этого не понимаю. Компилятор делает не что иное, как принимать файлы, которые вы его кормите, и генерирует из него машинный код. (Более конкретно, и объектный файл генерируется из файлов '.m' и' .c', содержащих фактический код. Файлы '.h', которые содержат только объявления и определения типов, не приводят к выполнению кода.) Затем компоновщик принимает объектные файлы и делает из них исполняемый файл. Но это более позднее и совершенно другое состояние, достигнутое строго после фазы предварительной обработки. – 2013-04-28 04:36:59

2

Импорт обрабатывается препроцессором в C, C++ и Objective C, который создает один большой файл для компилятора. Каждый файл * .m, * .c, * .cpp получит каждый импорт.

Вы можете скомпилировать код в командной строке с флагом -E, чтобы увидеть результат после добавления #imports.

Кроме того, этот вопрос выходит в некоторые подробности о #include против #import, так что он может дать вам более глубокий:

What is the difference between #import and #include in Objective-C?

Как вы можете изображения, имеющие много дополнительного импорт замедляют компиляцию. AppCode Jetbrain имеет функцию, которая позволит оптимизировать импорт:

http://www.jetbrains.com/objc/features/

+2

Обратите внимание, что вы также можете просмотреть предварительно обработанный вывод в Xcode, выбрав «Продукт»> «Создать вывод»> «Предварительно обработанный файл». – CRD

Смежные вопросы