Ответ на ваш вопрос - либо продолжить и импортировать файл заголовка typedef, либо использовать общий тип, такой как NSInteger, вместо типа enum.
Однако есть больше причин не импортировать файл заголовка, чем просто скорость компиляции.
Отказ от импорта файла заголовка также снижает вероятность непреднамеренного доступа к посторонним классам.
Например, предположим, что у вас есть класс TrackFileChanges, который отслеживает изменения файловой системы в конкретном файле, и класс CachedFile, в котором хранятся кэшированные данные из файла. Последний может использовать частный ivar типа TrackFileChanges *, но для использования CachedFile это просто деталь реализации (в идеале ivar будет автоматически сгенерирован с частным свойством с использованием новой среды выполнения, но это невозможно, если вы ' повторно используем старую среду выполнения).
Таким образом, клиентам, которые #import "CachedFile.h", вероятно, не нужен или не нужен доступ к TrackFileChanges.h. И если они это сделают, они должны прояснить это, # импортировав это сами. Используя @class TrackFileChanges вместо #import "TrackFileChanges.h" в CachedFile.h, вы улучшаете инкапсуляцию.
Но все, что было сказано, нет ничего плохого в импорте файла заголовка из второго файла заголовка, если второй заголовок хочет открыть первый для всех клиентов. Например, файлы заголовков, которые объявляют классы, необходимо импортировать непосредственно в файлы заголовков подклассов, а файлы заголовков, объявляющие протоколы, вполне могут быть импортированы напрямую (хотя вы можете использовать @protocol ABC; чтобы этого избежать).
person
Peter N Lewis
schedule
04.06.2009