Objective-C如何编译?

我只是很好奇,Objective-C是否编译成C代码或者Objective-C运行时是否像程序上方的抽象层一样工作? 如果我不知道我在说什么,请提前抱歉!

将Objective-C编译为C没有意义,因为它需要解析C代码并编译它。

Objective-C编译成机器代码 。 请记住,语言(Objective-C,C,C ++)仅定义正确编写代码的规则。 编译器检查您的代码是否正确并编译它,即将其转换为可执行代码

另外,不要混淆Objective-C语言和Objective-C运行时。 语言定义语法,运行时允许编译的代码运行(在某种程度上,就像你说的那样,它是一个层,但每次使用你的程序时都不会编译)。

编辑:
运行时实现计算机语言的核心行为。 运行时以类似于库的方式包含已编译的函数代码。 例如,在C中,当您调用printf()您的代码将被编译为机器代码并包含该函数实现的库链接 ; 这个机器代码的作用是将参数传递给库中的可执行代码。

一点历史课:

C ++和Objective C最初都是作为C的预处理器开始的。所以你输入了你的ObjC代码,它会有效地对代码进行搜索和替换,并将Objective-C命令转换为使用了一点点的直接C代码辅助库(objc / runtime.h和类似文件中的东西)。

随着语言开始变得越来越复杂,它变成了一个完整的解析器,它将C编译器中的解析器替换为/扩展为Objective-C特定的解析器。 因此,尽管将Objective-C编译成直接C是完全可能的,但是当前的ObjC编译器不再那样做了。

严格地说是从Xcode开始,代码是用LLVM编译器编译的。 以下是有关LLVM编译器的更多信息。 您将能够通过简单的Google搜索找到有关LLVM编译器如何在线工作的更多信息。