【发布时间】:2023-03-26 02:21:02
【问题描述】:
我刚开始使用 Objective-C,我有一个关于功能的问题。
假设我有一个接受和存储NSDictionary 对象的方法,并且我为它提供了NSMutableDictionary(毕竟是NSDictionary)。此方法将其存储在对象中,在NSDictionary 属性中,因此对象的类型实际上变为NSDictionary。这意味着用于将对象添加到 NSMutableDictionary 的选择器不再存在。
我来自 C++ 背景,虽然我应该尽量不将 Objective-C 实践映射到 C++ 实践,但这看起来与 C++ 中处理 constness 的方式非常相似(即,如果您通过非const 到接受相同类型的 const 变体的方法,对象在方法(以及实例)范围内变为 const。
有人能告诉我吗?
谢谢,
托马索
【问题讨论】:
-
总质子反转。
-
(不要从 C++ 的角度思考
const,将 NSMutableX 视为 NSX 的子类。您可以将 NSMutableX 传递给需要 NSX 的方法,但反之则不行,并且没有玩演员表等会改变这一点。) -
(实际上,NSX 和 NSMutableX 是“类集群”的成员,不在严格的类层次结构中,但内部标志强制区分可变/不可变,无论您如何转换或操纵指针。)
标签: c++ objective-c constants parameter-passing immutability