Подтвердить что ты не робот

Понимание фазы заголовков Xcode

В фазе Xcode "Копировальные заголовки" в чем разница между заголовками в разделе "Проект" и разделе "Private"? Когда вы хотите использовать каждый?

Кроме того, я могу понять, почему вы хотите скопировать публичные заголовки (например, для статической библиотеки) - но зачем вы хотите копировать частные заголовки?

Изменить: @mipadi ниже объясняет роли публичной и частной частей. Однако я все еще не вижу разницы между включением заголовка в части "Проект" и отсутствием заголовка в любой части фазы "Копировать заголовки".

4b9b3361

Ответ 1

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

Заголовки "Project" являются закрытыми заголовками, которые не включены в общий заголовок (они обычно являются частью внутренней реализации и поэтому включены только в реализацию - .c или .m - файл).

При создании структуры публичные заголовки копируются в каталог Headers структуры, тогда как частные заголовки копируются в каталог PrivateHeaders.

Ответ 2

@Danra, если вы помещаете заголовки в "Проект", эти заголовки будут видны вашим реализациям "независимо" от фактического расположения заголовков.

Скажем, у вас есть такая структура папок, как это:   /Sources/libAF/AFSomething.h   /Sources/libAF/AFSomething.m   /Sources/exec/main.m

Если вы поставили "AFSomething.h" в "Project", вы можете использовать его в main.m следующим образом:   #import "AFSomething.h"

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

Ответ 3

От Настройка видимости файла заголовка:

  • Public: интерфейс завершен и предназначен для использования клиентами ваших продуктов. Публичный заголовок включен в продукт как читаемый исходный код без ограничений.

  • Частный. Интерфейс не предназначен для ваших клиентов или его на ранних этапах разработки. Закрытый заголовок включен в продукт, но его отмеченный "private". Таким образом, символы видны всем клиентам, но клиенты должны понимать, что они не должны их использовать.

  • Проект: интерфейс предназначен только для файлов реализации в текущем проекте. Заголовок проекта не включен в целевой объект, за исключением объектного кода. Символы не видны клиентам вообще, только для вас.

Ответ 4

Чтобы добавить к этому, обычно у людей есть script для "очистки" личных заголовков, чтобы общедоступный канон никак не мог видеть, что представляют собой символы. Для целей отладки/разработки оставьте частные заголовки, они пригодится на этапах разработки и отладки.