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

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

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

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

Ответ 1

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

Что это?

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

Xcode

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

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

#import "Prefix.pch"

в верхней части файла, прежде чем что-либо еще.

Удаление это.

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

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

Ответ 2

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

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

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

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

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

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Вот типичный файл Prefix.pch из старого проекта, который импортирует заголовки UIKit и Foundation, а также проверяет, по крайней мере, iOS 5:

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

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

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

Теперь, когда modules[About] доступны, нет необходимости продолжать перечисление системных платформ в precompiled prefix header. Если вам нужно добавить префиксный заголовок в проект Xcode, вы все равно можете сделать это, изменив вручную Build Settings

  1. Precompile Prefix Header пометить ДА
  2. указав путь в Prefix Header:

Источник здесь