iOS中箭头成员选择运算符的使用
Use of Arrow Member Selection Operator in iOS
过去几天我一直在修改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指针算法来调整它,并使用指针作为函数调用,如果你做得对,它甚至应该工作得很好。但为什么呢?)
相关文章:
- 有条件地选择带有 decltype() 和三元运算符的类型
- 为什么选择转换运算符的重载?
- 是否可以在C++中使用三元运算符在 if 语句中选择比较运算符?
- 了解转换运算符的选择C++
- 为什么<iostream>运算符<<会选择明显错误的重载?
- 带大小参数和不带大小参数的"运算符删除":当两者都可用时,选择哪一个?
- 使用 std::function 时选择自动返回类型而不是构造函数的调用运算符
- 为什么在指针上对成员访问/元素选择有不同的运算符
- 强制编译器选择常量运算符重载
- 重载成员选择运算符
- 迭代器重载成员选择与间接运算符
- 关于智能指针中取消引用和成员选择运算符的定义
- clang-libc++错误:重载解析选择了隐式删除的复制赋值运算符
- C++ 编译器选择输出流运算符<<的错误重载
- 运算符 = 重载C++有选择地工作
- 转换是模棱两可的.标准隐式转换无法选择强制转换运算符
- 构造函数重载选择了强制转换运算符而不是结构类型
- iOS中箭头成员选择运算符的使用
- 具有重载的取消引用运算符的成员选择
- 显式运算符<<选择重载'wrong'