Objective c 为什么一个简单的程序会导入<;基础/基础h>;而不是单个头文件?

Objective c 为什么一个简单的程序会导入<;基础/基础h>;而不是单个头文件?,objective-c,Objective C,我是Objective-C新手。Xcode生成的模板代码包含: #import <Foundation/Foundation.h> #导入 当我在/System/Library/Frameworks/Foundation.framework/Headers上查看时,有将近2000个头文件 我的问题是,对于一个只使用NSString的简单代码,为什么不只导入NSString.h文件呢 是否导入了一堆基础框架会影响可执行文件的性能?如果没有,它是否有一些好处?它不会影响性能,因为内置

我是Objective-C新手。Xcode生成的模板代码包含:

#import <Foundation/Foundation.h>
#导入
当我在/System/Library/Frameworks/Foundation.framework/Headers上查看时,有将近2000个头文件

我的问题是,对于一个只使用NSString的简单代码,为什么不只导入NSString.h文件呢


是否导入了一堆基础框架会影响可执行文件的性能?如果没有,它是否有一些好处?

它不会影响性能,因为内置框架都安装在设备上,已经可以通过可执行文件链接到

当你在代码<>导入< /代码>时,你所说的是“我想访问基础框架的功能,即使我不使用它”。这是一种语义划分

编译器将对丢弃未使用的符号进行所有需要进行的优化


仅在NSString.h上执行导入的问题是,您是否知道NSString有哪些依赖项。我不知道,也不需要知道

根据您的问题,使用非常简单的代码,如下所示:

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

只要打印“Hello World”,如果不导入Basic .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


这就像C中的
#include
或C++

中的
#inlcude
一样,难道您不希望NSString.h导入它自己的依赖项吗?@TenMinJoe True。这不是世界上写得最好的句子,但它多少说明了框架导入是原子的。把它弄糟,后果自负。