如何在Objective-C中调用方法与C ++有什么不同?

时间:2011-12-20 01:42:12

标签: c++ objective-c gcc

  

可能重复:
  Objective C message dispatch mechanism

我的问题不是关于语法。我想学习如何在C ++中调用方法与在Objective-C中向对象发送消息以及如何执行它们不同?

2 个答案:

答案 0 :(得分:5)

这是一个非常复杂的问题,因为与C不同,没有修复C ++调用对话。

Objective-C只是C的一个薄包装器,所以它使用相同的约定。 现在,当您发送如下消息时,还有一件事:

[target selector];

与以下内容相同:

objc_msgSend(target, @selector(selector));

然后它只是传统的C调用约定,第一个表查找与您的消息匹配的函数。 objc_msgSend稍微复杂一点,因为它将参数堆栈保持在原位并将其直接传递给底层函数。

C ++调用约定不同于一个名称修改到另一个,甚至从一个编译器到另一个编译器。

从性能的角度来看,C ++方法调用更快,因为链接在编译时被解析(更准确地说是在链接时)。该方法是否存在,这会导致链接器错误。

Objective-C方法调用包括在运行时查找方法表,因此您的方法可以在代码中稍后添加,这样可以提供更大的灵活性但性能更低。

答案 1 :(得分:-2)

完全相同且完全不同。在C ++中你会说

result = myObjectPtr ->myMethod(myParm1, myParm2);

在Objective-C中你会说

result = [myObjectPtr myMethodWithParm1:myParm1 andParm2:myParm2];

在简单的情况下,从外观的角度来看,它们的功能相同,但在实现层面上存在很多差异,因为Objective-C调用是动态的。

要详细列举所有差异需要几页(尽管最简单的情况下差异不大)。