В чем разница при размещении заголовка внутри файла pch?

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

Например, UIKit.h


person Adam Lee    schedule 13.07.2013    source источник


Ответы (1)


Я считаю, что здесь есть 2 вопроса:

  1. Зачем дублировать импорт заголовочных файлов в pch и отдельные исходные файлы? Вы правы, это избыточно, и вы можете легко избавиться от одного из дублированных импортов и по-прежнему запускать свою программу и по-прежнему иметь возможность использовать справку по завершению Xcode. Например, вы можете удалить импорт UIKit либо из .pch, либо из контроллера представления. Однако UIKit и UIFoundation — это особый случай, поскольку они в значительной степени лежат в основе Cocoa Touch, и именно так загружаются проекты шаблонов. И поэтому Apple решила их продублировать. Вероятно, это связано с тем, что разработчик может решить избавиться от .pch, и поэтому Apple хотела убедиться, что каждый новый UIViewController будет работать сразу после запуска, поскольку он будет автоматически импортировать UIKit. Но для всех других фреймворков/классов, которые вы добавляете, вам нужно поместить их только в одно место (файл .pch или отдельный исходный файл, который его импортирует). Это приводит ко второму вопросу:

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

PS: независимо от того, импортируете ли вы фреймворки/классы в файле .pch или в отдельных классах; вам все равно нужно связать соответствующую структуру/библиотеку в проекте, поскольку именно здесь код находится по сравнению с общедоступным заголовком, который просто помогает вам писать код, использующий общедоступные свойства/переменные и методы этого класса/фреймворка. UIKit и базовые фреймворки связаны по умолчанию.

PS2: Как указано в файле .pch, любые заголовки, перечисленные в .pch, будут импортированы во все исходные файлы. Вы можете подумать, что это избыточно, но использование #import устраняет любой избыточный импорт.

Надеюсь это поможет

person Khaled Barazi    schedule 13.07.2013