Objective-C属性的Copy属性是创建深层副本还是浅层副本?

时间:2012-03-05 15:41:58

标签: objective-c

我有一个NSMutabelArray,其中有一些对象作为我View-Controller的属性。 现在,当我推送这个VC时,我传递了这个数组。

我最初分配了它。

但现在我需要在VC中旋转时修改数组,而不影响之前VC中的数组。 所以它成了一个复制属性。

现在我正在单独更改数组中的对象。

但不知何故......我的前VC中的阵列也在变化。

我必须使用修改过的对象创建一个新的NSMutabelArray,并且必须设置为我的属性。

复制属性是否只是使另一个数组具有相同的对象引用添加到数组中?

2 个答案:

答案 0 :(得分:10)

copy属性表示在将copy消息发送到传入的对象后,将为该属性分配返回的对象。这是指深度还是浅度取决于要复制的对象。 Foundation集合创建浅表副本,因为它允许copy实现为retain不可变集合。

答案 1 :(得分:3)

  

复制属性是否只是使另一个数组具有相同的对象引用添加到数组中?

是的,这就是它的工作原理。

this answer中深入复制数组有一些建议。也许其中一个适合你?