我正在尝试了解在导入文件的编译时和运行时真正发生的事情。
#import "file.h"
指令是否实际上将整个file.m
复制并粘贴到当前文件中?或者只是指定文件的位置并在实例化时创建必要的属性?
答案 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具有优化导入的功能:
答案 1 :(得分:1)
#import file.h
语句是否基本上将整个file.m复制并粘贴到当前文件中?
这不是声明,而是预处理程序指令。
您在文件名周围缺少引号或尖括号。
#import "file.h"
确实将整个file.h
文件代替此指令复制到当前文件中。但是,它不会对file.m
执行任何操作。