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