2012-10-23 35 views
1

复制数组将创建数组的新实例,但数组中的对象仍旧从旧数组中引用。这不是一个错误?目标C - 复制NSArray不会真的复制对象吗?

项目在数组:项目:在新的数组0xa623800

项目:项目:0xa623800

po [self selectedItems] 
(NSMutableArray *) $1 = 0x0a21f1a0 <__NSArrayM 0xa21f1a0>(
<Item: 0xa623800> 
) 

po [[self selectedItems] copy] 
(id) $2 = 0x0b854fd0 <__NSArrayI 0xb854fd0>(
<Item: 0xa623800> 
) 

回答

4

它没有副本的阵列,而不是数组中的项目。这是一个深层次的副本。我想你可能需要-initWithArray:copyItems:

+1

正确; 'copy'是一个浅拷贝。请注意'initWithArray:copyItems:'仍然很浅;如果你的数组充满了数组,它将不会深入复制那些数组中的项目。实际上,深度复制实际上很难做到。 – bbum

+0

@bbum很好的观察 –