.h和.m文件之间的关系是什么?

时间:2014-02-23 20:34:22

标签: objective-c

我知道.m文件是实现的地方,.h文件有方法签名等。当想要在他的类中使用某个类时,他会导入.h文件。预处理器使用.h文件的内容替换导入的.h文件。我不明白的是,如何通过预处理器带来.h内容来实现对实现的访问?什么是允许这样的运行时机制?

1 个答案:

答案 0 :(得分:5)

导入.h文件实际上并不是那样的,所以你应该感到困惑!

编译程序时,每个文件都被编译为“目标文件”,并且这些文件都链接在一起成为可执行程序。正是这个链​​接步骤提供了对实现的访问。

同样,您使用的任何库都需要链接(Xcode的项目模板为您为Foundation,UIKit / AppKit和其他常用库执行此操作)。这种类型的链接在编译时部分完成,然后在应用程序启动时动态完成,这样它就可以获得操作系统中包含的库的版本,而不是您编译的版本。

导入标题只是让编译器知道链接库中的内容,以便它可以编译引用它们的代码。如果您查找动态使用的功能而不是让编译器执行它(通过dlopen,dlsym,NSClassFromString,NSSelectorFromString等...),那么您可以使用链接代码而无需导入其标题。