2012-10-23 77 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很好的觀察 –