在iOS中使用箭头成员选择运算符

时间:2013-07-14 14:17:04

标签: c++ ios objective-c pointers

过去几天我一直在修改C ++,只是阅读了箭头成员选择操作符。

在C ++中:

MyClass classObject;
MyClass *classPointer = &classObject;

classPointer->someFunction();

这是箭头成员选择运算符用于访问函数的方式。

但是在Objective-C中:

MyViewController *vc = [[MyViewController alloc] init];
[vc someFunction];

我习惯写这样的代码。为什么这段代码合适?现在修改C ++之后,这对我来说没有意义。

对不起,如果这是一个愚蠢的问题。

想更好地理解这个概念。

2 个答案:

答案 0 :(得分:1)

你提到的第二段代码确实是Objective-C。

这里实际发生的是您向vc发送消息以调用someFunction方法。

Objective-C运行时处理这些消息。

如果您感兴趣,请参阅Apple关于Objective-C运行时的文档中的详细信息:Objective-C Runtime Programming Guide: Messaging

答案 1 :(得分:1)

您的第一个代码片段位于C ++上下文中,第二个代码片段位于Objective-C上下文中。

两者都是不同的编程语言,它们可能共享更多共同点而不是差异。至少两者都基于标准C. 一些差异非常重要,例如绑定过程。

你的问题是什么?

如果它真的是关于箭头操作符。在Obj-C中仍然存在它从C语言“继承”的扩展。在Obj-C中的每个对象下面都由C结构(类似于C ++对象)在内存中表示,因此您可以访问reglular iVars箭头操作符,但没有常规方法。

(你当然可以通过滥用常规C指针算法来调整它,并使用指针作为函数调用,并且如果你做得正确,它甚至应该工作正常。但是为什么?)