Недостаток включения заголовков в каждый исходный файл (Objective-C) - PullRequest
2 голосов
/ 17 мая 2010

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

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

Ответы [ 2 ]

1 голос
/ 17 мая 2010

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

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

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

-(void) doSomethingWith: (float) aNumber;

и

-(void) doSomethingWith: (double) aNumber;

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

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

1 голос
/ 17 мая 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...