我的问题不是关于语法。我想学习如何在C ++中调用方法与在Objective-C中向对象发送消息以及如何执行它们不同?
答案 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调用是动态的。
要详细列举所有差异需要几页(尽管最简单的情况下差异不大)。