iOS:设置属性

时间:2012-08-11 00:40:26

标签: ios pointers pointer-address

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

@property (nonatomic, copy) id obj;

使用点语法或setter时,会将其翻译为:

_obj = [otherObj copy];

在这里,它将取决于所讨论的对象是否支持复制本身,还是它将回退到它的超类NSObject或其他中间类的副本。

此外,集合类NSDictionaryNSArray执行浅拷贝,因为它们只复制对象的引用,因此您有两个集合指向同一组对象。