2011-08-12 96 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