Выбор файла PCH

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

У меня вопрос: как выбрать, какие файлы заголовков должны быть помещены в ваш PCH? Следует ли вам просто закинуть туда все файлы заголовков, или это действительно не будет оптимальным решением?


person bobobobo    schedule 29.10.2013    source источник
comment
Если вы используете Xcode 5 - обратите внимание на модули, которые поддерживаются для системных фреймворков. Затем вы можете сделать что-то вроде @import UIKit;, и он будет использовать предварительно скомпилированную базу данных, а не фактический текстовый импорт. Вы можете сделать это в отдельных файлах, что так же быстро, как и предварительная компиляция, и не добавляет импорт глобально. Что касается вашего pch-файла, добавьте заголовки, которые вряд ли изменятся. Потому что, если они все же изменят, pch снова будет предварительно скомпилирован, и вы потеряете его преимущества.   -  person Abizern    schedule 29.10.2013


Ответы (2)


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

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

Предварительно скомпилированные заголовки, особенно при создании вашего приложения, могут быть очень полезны. Заголовки в файле .pch компилируются только в первый раз и только тогда, если заголовки изменятся в будущем. Если ваше приложение импортирует много фреймворков / заголовков, которые не меняются; это может ускорить сборку (компиляцию), поскольку компилятор будет использовать .pch вместо компиляции каждой импортированной структуры / класса при каждой компиляции.

person Nikos M.    schedule 29.10.2013
comment
Да, но, какие файлы следует вырезать? Все они? - person bobobobo; 29.10.2013
comment
Отредактировал свой ответ, надеюсь, я вам больше помог. - person Nikos M.; 29.10.2013
comment
Ну да, похоже, есть компромисс. Чем больше вы включаете в pch, тем быстрее будет начальная компиляция, но в определенный момент окончательная сборка займет гораздо больше времени. Я не знаю, нужно ли мне больше ОЗУ или что-то еще, но что-то замедляет процесс компиляции в целом (примерно на 10 секунд или около того), когда я включаю слишком много файлов в PCH. - person bobobobo; 03.11.2013

PCH-файл будет включен во все ваши исходные файлы по умолчанию.

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

вот образец из одного из моих проектов:

#ifdef __OBJC__
    #import <Cocoa/Cocoa.h>
    #import "Errors.h"
    #import "Localization.h"
    #import "Logging.h"
#endif

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

person Brad Allred    schedule 29.10.2013