有没有办法将Objective-C代码编译为C?我有兴趣知道各种各样的东西是如何真的代表引擎盖,但我在处理大会时感到不舒服。
例如,我在一本书中读到,方法被表示为具有基于类和方法名称的唯一名称的函数,并且id
类型被定义为具有单个成员的结构({{1} })。有可能看到这个吗?
答案 0 :(得分:4)
我在某处读过Objective-C曾经被实现为C上的预处理器,但事实并非如此。虽然可以在C中访问运行时,但我认为没有办法使用现代编译器从Objective-C代码生成C代码(尽管技术上可行,但如果事情变得太丑陋)。
然而,过去有一些遗物。如果右键单击id
并选择跳转到定义,您将看到typedef。如果您调试代码并查看对象的结构,您将看到它的第一个字段始终是超类的结构,并且它一直到isa
。而Apple provides documentation on the runtime可以让您对事情的运作方式有所了解。
答案 1 :(得分:1)
如果您在没有优化的情况下进行编译,并找到合适的C反编译器,您可能会获得部分有用的结果。
Objective C语言中的几乎所有内容都可以用C代码表示,并使用“隐藏”结构元素调用Objective C运行时。
(是否有人知道该语言的旧版本的早期宏预处理器实现是否仍然存在且可用?)