2011-08-12 95 views
0

我是相對較新的Objective-C和我有一個2D NSMutableArray的問題,它的行爲時,將一個NSMutableArray的內容添加到另一個。NSMutableArray的NSMutableArray,addObject問題

我有一個包含NSMutableArray的單例類。該數組用於存儲NSURL值。 在我的程序中的某個點上,我需要將此NSMutableArray作爲一個整體添加到另一個NSMutableArray。

我這樣做: [arrayIWantStuffIn addObject:mySingleton.singletonMutableArray];

我遇到的問題是我需要重置我的singltonMutableArray以開始存儲一組新的NSURL值。上面的addObject函數似乎是通過引用而不是按值傳遞的,所以當我這樣做時:

[mySingleton.singletonMutableArray removeAllObjects];

保存在arrayIWantStuffIn中的數據也會被擦除。

我該如何實現一個'deep'addObject,它是通過值而不是通過引用將NSMutableArray添加到另一個NSMutableArray?

回答

0

你實際上不需要深拷貝另一個mutableCopy。這可以簡單地通過執行以下操作

[arrayIWantStuffIn addObject: [[mySingleton.singletonMutableArray mutablCopy] autorelease]]; 

一旦當singletonMutableArray被清除或改變它不會改變你的arrayIWantStuffIn項目,你仍然可以獨立修改內容做來完成。

+0

這就像一個魅力。謝謝喬。只是確保我正確地理解了這一點,[mySingleton.singletonMutableArray mutableCopy]對我的singletonMutableArray做了一個深層副本,然後使用該副本作爲傳遞給addObject的對象? –

+0

它不會對你的'singletonMutableArray'做一個深層次的拷貝,這樣mutableCopy在拷貝的時候仍然會指向相同的'NSURL',但是當你對'singletonMutableArray'進行修改時,它不會改變'arrayIWantStuffIn'反之亦然。另外'NSURL'是不可改變的,所以你不必擔心這些改變。 – Joe