2010-05-17 1 views
2

В настоящее время я включаю в себя мои AppDelegate.h и все заголовки своих категорий в каждый из моих исходных файлов, используя заголовок префикса MyApp_Prefix.pch, а не вручную #import их только там, где Они используются. Методы категорий и множество компилятора #define в моем делете приложения используются во многих местах моего кода.Даунсайд для включения заголовков в каждый исходный файл (Objective-C)

Есть ли какая-либо нижняя сторона этого? Это просто, что компиляция займет больше времени?

ответ

1

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

OTOH для небольших проектов это не может быть большой проблемой во много раз.

Тем не менее для меня лично я привык никогда не зависать от другого исходного файла без необходимости - это значит, что мои файлы заголовков редко #import других (не-фреймворных) заголовков. В Objective-C вы обычно можете сделать это более чисто, чем, скажем, C++, потому что вы всегда держите объекты Objective-C указателем, поэтому им нужно только объявление вперед в заголовке.

1

Есть ли какая-либо нижняя сторона этого? Это просто, что компиляция займет больше времени?

Нет, не совсем. Это означает, что каждый раз, когда вы вносите изменения в любой заголовок, весь проект перекомпилируется. Но, с другой стороны, поскольку он предварительно скомпилирован, может быть экономия в случае, когда вам нужно перекомпилировать, но не менять заголовки.

Есть преимущество, чтобы набивать все ваши заголовки в файл pch, потому что это означает, что вы вряд ли опустите заголовок случайно. Иногда Objective-C компилирует вещи неправильно, если у него нет файла заголовка, например. если у вас есть два класса с методами, объявленных как:

-(void) doSomethingWith: (float) aNumber; 

и

-(void) doSomethingWith: (double) aNumber; 

без правильных заголовков, Objective-C может угадать неправильный doSomethingWith: и пройти двойной, где поплавок, как ожидается, или наоборот.

Сказав все это, я никогда не беспокоюсь о pch. Я имею в виду только импортировать заголовки в .m-файлах, где это возможно, и пересылать объявления классов в файлах заголовков.

Смежные вопросы