gpt4 book ai didi

c++ - 当您将 NSMutable* 对象传递给接受 NS* 对象的方法时会发生什么?

转载 作者:行者123 更新时间:2023-11-28 06:47:49 25 4
gpt4 key购买 nike

我刚开始使用 Objective-C,我有一个关于功能的问题。假设我有一个接受和存储 NSDictionary 对象的方法,我为它提供了一个 NSMutableDictionary(毕竟,这是一个 NSDictionary ).此方法将其存储在对象内部的 NSDictionary 属性中,因此对象的类型实际上变成了 NSDictionary。这意味着用于将对象添加到 NSMutableDictionary 的选择器不再存在。

我有 C++ 背景,虽然我应该尽量不要将 Objective-C 实践映射到 C++ 实践,但这看起来与 C++ 中处理 constness 的方式非常相似(即,如果您将非 const 传递给接受相同类型的 const 变体的方法,该对象在方法内部变为 const(因此实例)范围。

有人可以启发我吗?

谢谢,
托马索

最佳答案

这部分问题:

This method stores it inside the object, in a NSDictionary property, so the type of the object becomes in fact NSDictionary.

... 是错误的。不发生类型转换。该对象仍然是 NSMutableDictionary,只是从接口(interface)中不再显式显示它是这样。

Objective-C 对象在运行时是无类型的。键入是为了您作为程序员的利益,并允许编译器生成适当的警告。强制转换指针与在 C++ 中强制转换指针具有完全相同的效果——它对指向的对象没有影响。在这种情况下,您所做的就是将指向可变事物的指针转换为指向不可变事物的指针(就编译器而言,这是一个父类(super class),因此允许隐式转换)。

如果您想获取可变对象的不可变拷贝,请使用copycopy 总是返回一个不可变拷贝,即使原始拷贝是可变的,mutableCopy 也是可变拷贝所必需的。使用 copy 修饰符声明属性,让前者为您完成。不要担心对已经不可变的对象进行不必要的复制——它们将作为拷贝返回自己(执行适当的内存所有权簿记)。

关于c++ - 当您将 NSMutable* 对象传递给接受 NS* 对象的方法时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643831/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com