我是Objective-C的新手。 Xcode生成的模板代码包含:#import <Foundation/Foundation.h>
。
当我在/System/Library/Frameworks/Foundation.framework/Headers上查看它时,有近2千个头文件!
我的问题是,对于一个只使用NSString的非常简单的代码,为什么不只导入NSString.h文件?
导入整个Foundation框架会影响可执行文件的性能吗?如果没有,它有什么好处吗?
答案 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>