【发布时间】:2011-12-20 09:51:03
【问题描述】:
我的问题不是关于语法的。我想了解在 C++ 中调用方法与在 Objective-C 中向对象发送消息有何不同以及它们是如何执行的?
【问题讨论】:
标签: c++ objective-c gcc
我的问题不是关于语法的。我想了解在 C++ 中调用方法与在 Objective-C 中向对象发送消息有何不同以及它们是如何执行的?
【问题讨论】:
标签: c++ objective-c gcc
这是一个相当复杂的问题,因为与 C 不同,没有固定的 C++ 调用对流。
Objective-C 只是 C 的一个薄包装,所以它使用相同的约定。 到现在还有一件事,当您发送如下消息时:
[target selector];
同理:
objc_msgSend(target, @selector(selector));
然后它只是传统的 C 调用约定,首先查找与您的消息匹配的函数。 objc_msgSend 有点复杂,因为它将参数堆栈保持在原位并将其直接传递给底层函数。
C++ 调用约定因名称修改不同而不同,甚至不同编译器不同。
从性能的角度来看,C++ 方法调用更快,因为链接是在编译时解析的(更准确地说是在链接时)。该方法存在或不存在,导致链接器错误。
Objective-C 方法调用包括在运行时查找方法表,因此您的方法可以稍后添加到您的代码中,这提供了更大的灵活性但性能较低。
【讨论】:
完全一样又完全不同。在 C++ 中你会说
result = myObjectPtr ->myMethod(myParm1, myParm2);
在 Objective-C 中你会说
result = [myObjectPtr myMethodWithParm1:myParm1 andParm2:myParm2];
在简单的情况下,从外观的角度来看,它们的功能相同,但在实现级别上有很多差异,因为 Objective-C 调用是动态的。
要详细列举所有差异需要几页纸(尽管对于最简单的情况,差异并不显着)。
【讨论】: