Is Objective-C converted to C code before compilation?
我知道目标C是C的严格超集,我们在写同样的东西。但当我写的时候
1 2 | @interface Myintf {} @end |
它是否被转换为C结构,或者由目标C编译器准备的数据结构myintf的内存布局与在runtime.h中定义的C结构的内存布局相同?
关于objc_msgsend的同样问题
苹果文件上说
In Objective-C, messages aren’t bound to method implementations until runtime. The compiler converts a message expression, into a call on a messaging function, objc_msgSend. This function takes the receiver and the name of the method mentioned in the message—that is, the method selector—as its two principal parameters:
Does it get converted to a C struct
在过去,它曾经是,但在现代运行时(OS X 10.5+64位和iOS)中,我认为它有点复杂。它不能使用传统的
and same question about objc_msgsend
对。所有方法调用(或者更准确地说,所有消息发送)都转换为对
请注意,Objective-C的早期实现是作为预处理器实现的,并作为中间步骤生成C源代码。现代编译器并不为此烦恼,直接从Objective-C源代码转换为目标代码格式。
否和否。这两种情况最终都依赖于运行时。在某种程度上,它被转换为使用C接口,但是引入了一个抽象级别——它不是完全静态的。
它将有助于查看编译器生成的程序集,以更详细地了解这是如何工作的。
根据声明:
1 | id objc_msgSend(id theReceiver, SEL theSelector, ...); |
当实现调用方法时,编译器插入对