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

Use of Arrow Member Selection Operator in iOS

本文关键字:运算符 选择 中箭 成员 iOS      更新时间:2023-10-16

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

在C++中:

MyClass classObject;
MyClass *classPointer = &classObject;
classPointer->someFunction();

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

但在Objective-C中:

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

我习惯于写这样的代码。为什么这个代码是正确的?现在,在修改了C++之后,这对我来说没有意义

如果这是个愚蠢的问题,我很抱歉。

希望更好地理解这个概念。

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

这里实际发生的情况是,您正在向vc发送一条消息以调用someFunction方法。

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

如果你感兴趣的话,苹果关于Objective-C运行时的文档中概述了详细信息:Objective-C runtime Programming Guide:Messaging

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

两者都是不同的编程语言,可能有更多的共同点而不是差异。至少两者都是基于标准C。有些差异是相当显著的,比如绑定过程。

你的问题是什么?

如果真的是关于箭头运算符。这在Obj-C中仍然存在,它是从C"继承"而来的。在Obj-C中的每个对象下面,内存中都由一个C结构(类似于C++对象)表示,因此您可以使用箭头运算符访问reglular iVars,但不能使用常规方法。

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