我只是好奇,Objective-C是否编译成C代码或者Objective-C运行时是否像程序上方的抽象层一样工作?如果我不知道我在说什么,请提前抱歉!
答案 0 :(得分:14)
一点历史课:
C ++和Objective C最初都是作为C的预处理器开始的。所以你输入了你的ObjC代码,它会有效地对代码进行搜索和替换,并将Objective-C命令转换成直接的C代码。使用了一个小帮助库(objc / runtime.h和类似文件中的东西)。
随着语言变得越来越复杂,它变成了一个完整的解析器,它将C编译器中的解析器替换为/扩展为Objective-C特定的解析器。因此,尽管将Objective-C编译成直接C是完全可能的,但目前的ObjC编译器不再这样做了。
答案 1 :(得分:8)
将Objective-C编译为C没有意义,因为它需要解析C代码并进行编译。
Objective-C编译成机器代码。请记住,语言(Objective-C,C,C ++)仅定义了正确编写代码的规则。编译器会检查您的代码是否正确并进行编译,即将其转换为可执行代码。
另外,不要混淆Objective-C语言和Objective-C运行时。语言定义了语法,运行时允许编译的代码运行(就像你说的那样,它是一个层,但每次使用你的程序都不会编译)。
编辑:
运行时实现计算机语言的核心行为。运行时以类似于库的方式包含已编译的函数代码。例如,在C中,当您调用printf()
时,您的代码被编译为机器代码,链接与包含该函数实现的库;这个机器代码的作用是将参数传递给库中的可执行代码。
答案 2 :(得分:0)
严格地说,从Xcode开始,代码是用LLVM编译器编译的。 Here是有关LLVM编译器的更多信息。您将能够通过简单的Google搜索找到有关LLVM编译器如何在线工作的更多信息。