Что такое файл Prefix.pch в Xcode?


100

Многие разработчики добавляют различные удобные макросы в Prefix.pch. Но мой вопрос в том, что это за Prefix.pchфайл.

  • Если я удалю этот Prefix.pchфайл из своего Xcode, мое приложение запустится? Или покажет ошибку? Или он вылетит во время сборки?

  • Как запустить приложение без Prefix.pchфайла


Ответы:


117

Предварительно скомпилированный заголовок.

Что это?

A Prefix.pch- это предварительно скомпилированный заголовок. Предварительно скомпилированные заголовки были изобретены, чтобы ускорить компиляцию . Вместо того, чтобы анализировать одни и те же файлы заголовков снова и снова, эти файлы анализируются один раз, заранее.

Xcode

В Xcode вы добавляете импорт нужных файлов заголовков в «заголовок префикса» и включаете их, Precompile Prefix Headerчтобы они были предварительно скомпилированы. Но идея заголовка префикса отличается от прекомпиляции.

Заголовок префикса неявно включается в начало каждого исходного файла. Как будто каждый исходный файл добавляет

#import "Prefix.pch"

вверху файла, прежде всего.

Удаление его.

Вы можете удалить предварительно скомпилированный заголовок. На этот вопрос уже был дан ответ в теме, на которую я ссылаюсь ниже. Он содержит всю необходимую информацию, а также полезные комментарии.

Можно ли удалить файл Prefix.pch из проекта Xcode?


25

Что такое файл Prefix.pch?

.Pch - это предварительно скомпилированный заголовок.

В языках программирования C и C ++ файл заголовка - это файл, текст которого может быть автоматически включен препроцессором C в другой исходный файл, что обычно определяется с помощью директив компилятора в исходном файле.

Заголовки префиксов компилируются и сохраняются в кеше, а затем автоматически включаются в каждый файл во время компиляции. Это может ускорить компиляцию и позволяет включать файл без добавления оператора импорта в каждый файл, который его использует. Они не требуются и фактически замедляют компиляцию всякий раз, когда вы их меняете.

Да, вы можете скомпилировать и запустить проект без файла .pch

В Xcode перейдите к настройкам вашей целевой сборки (Command-Option-E, вкладка build) и снимите флажок Precompile Prefix Header (GCC_PRECOMPILE_PREFIX_HEADER). Вы также можете удалить значение параметра «Заголовок префикса», если хотите.

Также обратите внимание, что,

Не помещайте макросы в файл .pch! Файл .pch по определению представляет собой предварительно скомпилированный заголовок конкретного проекта. Его действительно не следует использовать вне контекста проекта, и он действительно не должен содержать ничего, кроме #includes и #imports.

Если у вас есть макросы, которые вы хотите разделить между заголовками, вставьте их в отдельный файл заголовка - Common.h или что-то еще - и #include это в начале .pch


Пожалуйста, подумайте о том, чтобы добавить комментарий, чтобы указать причину отклонения этого старого квеста.
Хеманг

7

Заголовки префиксов компилируются и сохраняются в кеше, а затем автоматически включаются в каждый файл во время компиляции. Это может ускорить компиляцию и позволяет включать файл без добавления оператора импорта в каждый файл, который его использует. Они не требуются и фактически замедляют компиляцию всякий раз, когда вы их меняете.

Обычно .pchформирование именования файловyourProjectName-Prefix.pch


1

История:

#include => #import => .pch

#include vs #import

Предварительно скомпилированные заголовки - prefix.pch

#includeУ vs @importесть недостаток - медленное время сборки, поскольку компилятор должен анализировать и компилировать столько раз, сколько .hфайлов было импортировано.

Precompiled header file - .pch- собирает общие заголовки. Когда этот файл является предварительно скомпилированным, его можно использовать в исходных файлах, что ускоряет время сборки.

Взглянем на Prefix.pchобразец:

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

Чтобы добавить .pchфайл, перейдите по ссылке Build Settings:

введите описание изображения здесь

Разработчик должен управлять .pchфайлом, что требует дополнительных затрат на его поддержку.

Следующий шаг - @import[О программе]

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.