Ios 如何将NSMutableArray复制到另一个数组中?

Ios 如何将NSMutableArray复制到另一个数组中?,ios,objective-c,arrays,Ios,Objective C,Arrays,我正在尝试将一个数组复制到另一个数组。下面是我的代码 NSMutableArray firstArray = [[NSMutableArray alloc]init]; NSMutableArray secondArray = [[NSMutableArray alloc]init]; [firstArray addObject:@"1"]; [firstArray addObject:@"2"]; [firstArray addObject:@"3"]; [firstArray addObje

我正在尝试将一个数组复制到另一个数组。下面是我的代码

NSMutableArray firstArray = [[NSMutableArray alloc]init];
NSMutableArray secondArray = [[NSMutableArray alloc]init];
[firstArray addObject:@"1"];
[firstArray addObject:@"2"];
[firstArray addObject:@"3"];
[firstArray addObject:@"4"];
[firstArray addObject:@"5"];

// have tried following ways

// 1
secondArray=[firstArray copy];

// 2
[secondArray addObjectsFromArray:firstArray];

//3
secondArray = [[NSMutableArray alloc]initWithArray:firstArray];
它工作正常,但问题是当修改第一个数组时,它会在第二个数组中反映它的更改,我不希望这样


请告诉我哪种方法是正确的

问题是,您创建了一个“浅”副本。您需要的是“深度”拷贝:


您可以在Mac Developer Library的网站上找到更多信息。

只有在存储可变对象时,这才是一个问题
NSString
是不可变的。您还必须确保数组中的所有对象都符合
NSCopying
(选项1)或
NSCoding
(选项2)才能正常工作。我很难相信您所说的。(1) secondArray=[firstArray copy]-编译器应该警告您,因为结果是不可变的。在这两种情况下,firstArray中的更改都不会反映在secondArray中。你真的运行了这个代码吗?是的,我运行了这个代码。
NSArray *deepCopyArray=[[NSArray alloc] initWithArray:someArray copyItems:YES];
NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
      [NSKeyedArchiver archivedDataWithRootObject:oldArray]];