Ответы:
Я подозреваю, из-за модулей, которые устраняют необходимость в #import <Cocoa/Cocoa.h>
.
Относительно того, куда поместить код, который вы бы поместили в заголовок префикса, нет кода, который вы должны поместить в заголовок префикса. Поместите свой импорт в файлы, которые нуждаются в них. Поместите ваши определения в свои файлы. Положи свои макросы ... никуда. Прекратите писать макросы, если нет другого пути (например, когда вам нужно __FILE__
). Если вам нужны макросы, поместите их в заголовок и включите его.
Заголовок префикса был необходим для вещей, которые огромны и используются почти всем во всей системе (например Foundation.h
). Если у вас есть что-то такое огромное и вездесущее, вы должны переосмыслить свою архитектуру. Заголовки префиксов затрудняют повторное использование кода и создают небольшие проблемы со сборкой, если любой из перечисленных файлов может измениться. Избегайте их до тех пор, пока у вас не возникнет серьезная проблема со временем сборки, которая, как вы можете продемонстрировать, значительно улучшена с помощью префиксного заголовка.
В этом случае вы можете создать его и передать в Clang, но это очень редко, что это хорошая идея.
РЕДАКТИРОВАТЬ: На ваш конкретный вопрос о HUD, который вы используете во всех ваших контроллерах представления, да, вы должны абсолютно импортировать его в каждый контроллер представления, который фактически использует его. Это проясняет зависимости. Когда вы повторно используете свой контроллер представления в новом проекте (что часто случается, если вы хорошо строите свои контроллеры), вы сразу же узнаете, для чего он нужен. Это особенно важно для категорий, которые могут затруднить повторное использование кода, если он неявный.
Файл PCH не предназначен для того, чтобы избавиться от списка зависимостей. Вы все равно должны импортировать UIKit.h
или по Foundation.h
мере необходимости, как это делают шаблоны Xcode. Причиной использования PCH является увеличение времени сборки при работе с действительно большими заголовками (как в UIKit).
TWAPIManager.m
, например, в другой проект, вы получите ошибки, которые TWALog()
не определены, без подсказки о том, где его найти. Я столкнулся именно с этой проблемой в нескольких крупных проектах, пытающихся поделиться кодом. Создание TWAPILog.h
и импорт этого решает это с тривиальной стоимостью разработки.
Без вопроса, правильно это или нет, вы можете добавить файл PCH вручную:
Добавить новый файл PCH в проект: Новый файл> Другое> Файл PCH .
В параметре « Настройки сборки» Target задайте в качестве значения заголовка префикса имя файла PCH с префиксом имени проекта (т. Е. Для имени проекта и имени TestProject
файла PCH MyPrefixHeaderFile
добавьте значение TestProject/MyPrefixHeaderFile.pch
в plist).
СОВЕТ: Вы можете использовать такие вещи, как $(SRCROOT)
или, $(PROJECT_DIR)
чтобы попасть туда, куда вы положили .pch
проект.
На целевой объекте Построить настройки опции, установите значение прекомпиляцию Префикс заголовок к YES
.
Вам нужно создать собственный файл PCH
ДобавитьNew file -> Other-> PCH file
Затем добавьте путь к этому файлу PCH в вашу сборку setting->prefix header->path
($ (SRCROOT) /filename.pch)
$(PRODUCT_DIR)/$(PRODUCT_NAME)/PrefixHeader.pch
Добавить .pch file-
1) Добавить новый файл .pch в ваш проект-> Новый файл-> Другой-> PCH-файл
2) Перейти к настройке сборки вашего проекта.
3) Поиск "префикс заголовка". Вы можете найти это под Apple LLVM.
4) Вставьте это в поле $(SRCROOT)/yourPrefixHeaderFileName.pch
5) Очистить и построить проект. Это оно!!!
Если вы решили добавить файл .pch вручную и хотите использовать Objective-C, как и в xCode 6, вам также придется импортировать UIKit и Foundation-фреймворки в файл .pch. В противном случае вам придется импортировать эти фреймворки вручную в каждый заголовочный файл. В любом случае вы можете добавить следующий код, так как он проверяет используемый язык:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif
Используйте:
$ (PROJECT_DIR) / Название проекта / PrefixHeader.pch
Для добавления нового файла PCH выполните следующие шаги:
(1) Добавить новый fiew - Выбрать iOS - Другой и PCH файл
(2) добавить путь к этому файлу PCH в свой проект - BuildSetting - Apple LLVM 6.0 Language
Добавить заданный префикс заголовка пути YourApplicationName (root-path) /filename.pch