为什么一个简单的程序导入<foundation foundation.h =“”>而不是单个头文件?</foundation>

时间:2010-08-15 12:10:20

标签: objective-c

我是Objective-C的新手。 Xcode生成的模板代码包含:#import <Foundation/Foundation.h>。 当我在/System/Library/Frameworks/Foundation.framework/Headers上查看它时,有近2千个头文件!

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

导入整个Foundation框架会影响可执行文件的性能吗?如果没有,它有什么好处吗?

2 个答案:

答案 0 :(得分:17)

它不会影响性能,因为内置框架已经安装在您的设备上,已经准备好由您的可执行文件链接。

当你#import <Foundation/Foundation.h>是“我希望访问Foundation框架的功能时,即使我不使用它”,你所说的是什么。它是一个语义分裂。

编译器将完成丢弃未使用符号所需的所有优化。

在NSString.h上执行导入的问题是你知道NSString的依赖关系吗?我不知道,也不需要。

答案 1 :(得分:0)

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

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

仅尝试打印“ Hello World”,如果不导入foundation.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<stdio.h>或c ++中的#inlcude<iostream.h>