我知道.m文件是实现的地方,.h文件有方法签名等。当想要在他的类中使用某个类时,他会导入.h文件。预处理器使用.h文件的内容替换导入的.h文件。我不明白的是,如何通过预处理器带来.h内容来实现对实现的访问?什么是允许这样的运行时机制?
答案 0 :(得分:5)
导入.h文件实际上并不是那样的,所以你应该感到困惑!
编译程序时,每个文件都被编译为“目标文件”,并且这些文件都链接在一起成为可执行程序。正是这个链接步骤提供了对实现的访问。
同样,您使用的任何库都需要链接(Xcode的项目模板为您为Foundation,UIKit / AppKit和其他常用库执行此操作)。这种类型的链接在编译时部分完成,然后在应用程序启动时动态完成,这样它就可以获得操作系统中包含的库的版本,而不是您编译的版本。
导入标题只是让编译器知道链接库中的内容,以便它可以编译引用它们的代码。如果您查找动态使用的功能而不是让编译器执行它(通过dlopen,dlsym,NSClassFromString,NSSelectorFromString等...),那么您可以使用链接代码而无需导入其标题。