В некоторых учебниках говорится, что мы можем поместить некоторые файлы заголовков в файл pch. После этого я все еще вижу, что один и тот же заголовок включен в отдельный файл заголовка? почему мы помещаем заголовок в файл pch?
Например, UIKit.h
В некоторых учебниках говорится, что мы можем поместить некоторые файлы заголовков в файл pch. После этого я все еще вижу, что один и тот же заголовок включен в отдельный файл заголовка? почему мы помещаем заголовок в файл pch?
Например, UIKit.h
Я считаю, что здесь есть 2 вопроса:
Зачем дублировать импорт заголовочных файлов в pch и отдельные исходные файлы? Вы правы, это избыточно, и вы можете легко избавиться от одного из дублированных импортов и по-прежнему запускать свою программу и по-прежнему иметь возможность использовать справку по завершению Xcode. Например, вы можете удалить импорт UIKit либо из .pch, либо из контроллера представления. Однако UIKit и UIFoundation — это особый случай, поскольку они в значительной степени лежат в основе Cocoa Touch, и именно так загружаются проекты шаблонов. И поэтому Apple решила их продублировать. Вероятно, это связано с тем, что разработчик может решить избавиться от .pch, и поэтому Apple хотела убедиться, что каждый новый UIViewController будет работать сразу после запуска, поскольку он будет автоматически импортировать UIKit. Но для всех других фреймворков/классов, которые вы добавляете, вам нужно поместить их только в одно место (файл .pch или отдельный исходный файл, который его импортирует). Это приводит ко второму вопросу:
Когда использовать .pch (по сравнению с обычным импортом в исходный файл)? Предварительно скомпилированные заголовки, особенно во время сборки (компиляции) вашего приложения, могут быть очень полезны, поскольку заголовки в файле .pch компилируются только в первый раз и только в том случае, если заголовки изменятся в будущем. Если ваше приложение импортирует много фреймворков/заголовков, которые не меняются; это может ускорить сборку (компиляцию), поскольку компилятор будет использовать .pch, а не компилировать каждый импортированный фреймворк/класс каждый раз, когда вы компилируете.
PS: независимо от того, импортируете ли вы фреймворки/классы в файле .pch или в отдельных классах; вам все равно нужно связать соответствующую структуру/библиотеку в проекте, поскольку именно здесь код находится по сравнению с общедоступным заголовком, который просто помогает вам писать код, использующий общедоступные свойства/переменные и методы этого класса/фреймворка. UIKit и базовые фреймворки связаны по умолчанию.
PS2: Как указано в файле .pch, любые заголовки, перечисленные в .pch, будут импортированы во все исходные файлы. Вы можете подумать, что это избыточно, но использование #import устраняет любой избыточный импорт.
Надеюсь это поможет