NSMutableArray的NSMutableArray,addObject问题
问题描述:
我是相对较新的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?
答
你实际上不需要深拷贝另一个mutableCopy。这可以简单地通过执行以下操作
[arrayIWantStuffIn addObject: [[mySingleton.singletonMutableArray mutablCopy] autorelease]];
一旦当singletonMutableArray被清除或改变它不会改变你的arrayIWantStuffIn项目,你仍然可以独立修改内容做来完成。
这就像一个魅力。谢谢乔。只是确保我正确地理解了这一点,[mySingleton.singletonMutableArray mutableCopy]对我的singletonMutableArray做了一个深层副本,然后使用该副本作为传递给addObject的对象? –
它不会对你的'singletonMutableArray'做一个深层次的拷贝,这样mutableCopy在拷贝的时候仍然会指向相同的'NSURL',但是当你对'singletonMutableArray'进行修改时,它不会改变'arrayIWantStuffIn'反之亦然。另外'NSURL'是不可改变的,所以你不必担心这些改变。 – Joe