2

当我使用当前保留的 NSArray 中的对象设置属性时,它会只存储指针(轻量级),还是将内容复制到属性中?

据我所知,它似乎只会分配指针,但我不确定。

此外,在什么情况下会使用 *pointer = *otherPointer 或 set 方法(例如 setDelegate)复制值,而不是仅传递指针(如果有)。它不应该总是只传递指针地址吗?

4

1 回答 1

3

正如你所说,它总是通过指针。除非您专门添加取消引用符号,否则情况总是如此。

但是,当您向类添加属性并将 setter 设置为copy

@property (nonatomic, copy) id obj;

当使用点语法或 setter 时,这将被翻译为:

_obj = [otherObj copy];

在这里,这将取决于所讨论的对象是否支持复制自身,或者它会退回到它的超类NSObject或另一个中间类的副本。

此外,Collection 类NSDictionaryNSArray做一个浅拷贝,因为它们只复制对其对象的引用,所以你有两个指向同一组对象的集合。

于 2012-08-11T00:58:27.880 回答