Почему простая программа импортирует <Foundation / Foundation.h> вместо отдельных заголовочных файлов? - PullRequest
11 голосов
/ 15 августа 2010

Я новичок в Objective-C. Сгенерированный Xcode код шаблона содержит:

#import <Foundation/Foundation.h>

Когда я проверяю это в /System/Library/Frameworks/Foundation.framework/Headers, там есть почти 2 тысячи заголовочных файлов!

Мой вопрос: для действительно простого кода, использующего только NSString, почему бы не импортировать только файл NSString.h?

Влияет ли импорт всего пакета Foundation Framework на производительность исполняемых файлов? Если нет, то есть ли у него какие-то преимущества?

Ответы [ 2 ]

18 голосов
/ 15 августа 2010

Это не влияет на производительность, поскольку на вашем устройстве уже установлены встроенные фреймворки, уже готовые для соединения с вашим исполняемым файлом.

Что вы говорите, когда вы #import <Foundation/Foundation.h> говорите: «Я хотел бы получить доступ к функциональным возможностям платформы Foundation, даже если я не использую все это».Это семантическое разделение.

Компилятор выполнит всю оптимизацию, необходимую для удаления неиспользуемых символов.

Проблема с простым импортом в NSString.h заключается в том, знаете ли вы, чтозависимости есть для NSString.Я не знаю, и не нужно ни того, ни другого.

0 голосов
/ 02 апреля 2019

В соответствии с вашим вопросом в виде действительно простого кода, подобного приведенному ниже:

int main() {
   /* my first program in Objective-C */
  NSLog(@"Hello, World! \n");
   return 0;
}

Просто попробуйте напечатать "Hello World", если мы не импортируем framework.h, мы получим ошибку ниже:

main.m: In function ‘main’:
main.m:4:3: warning: implicit declaration of function ‘NSLog’ [-Wimplicit-function-declaration]
   NSLog(@"Hello, World! \n");
   ^~~~~
main.m:4:3: error: cannot find interface declaration for ‘NSConstantString’

Это означает, что все основные элементы, необходимые для выполнения программы, автоматически включаются в #import.Как в этом случае NSLog

Это так же, как #include<stdio.h> в C или #inlcude<iostream.h> в C ++

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