Objective-C是否加载整个#imported文件?

时间:2013-04-28 03:49:28

标签: objective-c compiler-construction header llvm

我正在尝试了解在导入文件的编译时和运行时真正发生的事情。

#import "file.h"指令是否实际上将整个file.m复制并粘贴到当前文件中?或者只是指定文件的位置并在实例化时创建必要的属性?

2 个答案:

答案 0 :(得分:2)

导入由C,C ++和Objective C中的预处理器处理,后者为编译器创建一个大文件。每个* .m,*。c,* .cpp文件都将获得所有导入。

您可以使用-E标志在命令行上编译代码,以便在添加所有#imports后查看结果。

此外,这个问题详细介绍了#include vs #import,因此它可能会为您提供更多见解:

What is the difference between #import and #include in Objective-C?

正如您可以想象的那样,有大量额外的导入会减慢编译速度。 Jetbrain的AppCode具有优化导入的功能:

http://www.jetbrains.com/objc/features/

答案 1 :(得分:1)

  

#import file.h语句是否基本上将整个file.m复制并粘贴到当前文件中?

  1. 这不是声明,而是预处理程序指令。

  2. 您在文件名周围缺少引号或尖括号。

  3. #import "file.h" 确实将整个file.h文件代替此指令复制到当前文件中。但是,它不会对file.m执行任何操作。