根据wikipedia,消息传递和调用方法之间的区别是“在消息传递中,每个参数都必须具有足够的可用内存,以便将现有参数复制到新消息的一部分中”,而仅在方法调用中参数的地址被传递。

消息传递与调用常规方法一样有什么不同,常规方法的所有参数均为结构或值类型,即必须将它们全部完全压入堆栈才能使被调用方能够使用它们?

最佳答案

实际调用函数后,就没有区别了。消息传递和调用方法之间的区别在于链接。对于c和c ++之类的语言,函数调用在编译时与链接器链接(与需要某些运行时支持的虚拟函数除外)。对于使用诸如Objective-C和Smalltalk之类的消息传递系统的语言,您不能保证在运行时将运行哪些功能。运行时确定对象是否实际上实现了消息中表示的功能。如果未实现,则该类通常将消息转发到另一个对象,或者引发异常。但是,如果该类确实实现了它,则运行时将确定实际函数的地址,并以与c完全相同的方式调用它(将参数和返回地址推入堆栈)。

总体而言,消息与直接调用方法是一样的,除了运行时会找到要调用的确切函数,而不是在编译时将其链接。

关于objective-c - 闲聊和ObjectiveC中传递的消息是否与参数中带有值类型(结构)的调用方法相同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5451926/

10-14 16:42
查看更多