Вопрос по objective-c, iphone, header, ios – В Objective-C импорт одинаковых заголовков в каждом классе увеличивает время компиляции?

10

Я новичок в программировании на Objective-C / iOS.

Я хочу создать один заголовочный файл, который включает все заголовки классов, которые я использую в своем проекте.
И импортировать заголовок в каждый файл заголовка класса.

Как этот вопрос:
Включая несколько классов в одном заголовочном файле

Но увеличивает ли этот подход время компиляции?
Или есть другой недостаток?

Скажите, пожалуйста, как импортировать заголовки.

Ваш Ответ

5   ответов
4

чтобы заголовки импортировались глобально, вы должны сделать это вYourProject-Prefix.pch файл. Это должно выглядеть примерно так ..

#import <Availability.h>

#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif

   #ifdef __OBJC__
   #import <UIKit/UIKit.h>
   #import <Foundation/Foundation.h>
   #import "YourGlobalHeader.h"
#endif

Теперь у всех твоих классов естьYourGlobalHeader.h автоматически импортируется.

0

ость сборки в некоторых случаях, но вы, вероятно, не заметите разницу.

Лучше хранить заголовки классов в разных файлах для целей организации. Кроме того, если вы включаете только заголовки, которые вам нужны, в ваши исходные файлы, то ваше время сборки будет сокращено, хотя, опять же, это не заметно, если вы используете приличную сборочную машину.

23

недавно сгенерированные проекты iOS идут с этой функциональностью, которая называется предварительно скомпилированный заголовок илиprefix header, и это файл с расширением.pch.

Вы можете добавить туда все заголовки, которые вам нужны, и XCode предварительно скомпилирует их перед тем, как что-либо построить, и использовать их для компиляции других модулей компиляции в вашем проекте (например,.m файлы).

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

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

Благодарность!.pch выглядит полезным. и спасибо за указание на недостаток размещения в нем всех заголовков классов, которые я использую в своем проекте. я сдамся, чтобы сделать это. js_
аголовок @Prefix недоступен в последней версии XCode (7.2) Abhishek Bedi
7

что каждый раз, когда вы изменяете заголовок класса, все файлы, включая даже косвенные, нужно будет перекомпилировать, в то время как если вы только импортируете нужный класс, а также используете @class, когда вы можете затем только файлы, которые непосредственно используют класс, должны быть перекомпилированы. Таким образом, в первом случае компиляций будет намного больше, чем во втором. Именно так я бы рекомендовал начать.

Однако когда ваш код становится более стабильным, а классы НЕ меняются, то размещение их всех в одном заголовке может сократить время компиляции, поскольку предварительно скомпилированный заголовок будет содержать одинаковую информацию для каждого файла. Что я хотел бы сделать, это когда код не меняется так сильно, помещать зрелые классы в Framework, а заголовок Framework будет включать все эти классы.

Отличный момент. Я обычно помещаю только заголовки SDK Framework в.pch файлы и случайный сторонний заголовок библиотеки. Shaggy Frog
6

роекта. Затем вы можете использовать его в своих классах.

Похожие вопросы