Ios NSArray mutableCopy创建新数组,但仍指向旧内容

Ios NSArray mutableCopy创建新数组,但仍指向旧内容,ios,iphone,objective-c,arrays,deep-copy,Ios,Iphone,Objective C,Arrays,Deep Copy,在我的singleton类中有一个名为PlayerArray的NSMutableArray,它为我的应用程序保存主数据源。 playersArray的每个对象都是一个NSDictionary,内容如下: { sgfID = 1; sgfPlayer = "<PlayerContact: 0xbf851b0>"; } 现在我有了两个单独的副本,我的印象是PlayerArray和DuplicatePlayerArray在内存中是两个完全不同的数组。但是我发现他们不是 即

在我的singleton类中有一个名为
PlayerArray
NSMutableArray
,它为我的应用程序保存主数据源。
playersArray
的每个对象都是一个
NSDictionary
,内容如下:

{
    sgfID = 1;
    sgfPlayer = "<PlayerContact: 0xbf851b0>";
}
现在我有了两个单独的副本,我的印象是PlayerArray和DuplicatePlayerArray在内存中是两个完全不同的数组。但是我发现他们不是

即使调试器显示它们具有不同的内存地址,它们的内容也具有相同的内存地址。所以当我这样做的时候:

[((NSMutableDictionary *)[duplicatePlayersArray objectAtIndex:0]) setObject:@"333" forKey:@"sgfID"];
PlayerArray在索引0处的字典也使用“333”作为键“sgfID”,而不是在运行上述代码行之前使用的“1”

但是,如果我运行下面的代码,只有到那时,两个数组才开始不同

[duplicatePlayersArray replaceObjectAtIndex:0 withObject:tempDict];
但这并不能解决我的担忧,因为我想相信的两个不同的阵列仍然是“连接的”。一个数组中的更改会导致另一个数组更改其内容


朋友们,请告诉我一种深度复制数组的方法,我解释了数组的内容,所有内容都保存在不同的对象中。

使用
initWithArray:copyItems:
复制数组中的每个条目

NSMutableArray *duplicatePlayersArray = [[NSMutableArray alloc] initWithArray:playersArray copyItems:YES];

使用
initWithArray:copyItems:
复制数组中的每个条目

NSMutableArray *duplicatePlayersArray = [[NSMutableArray alloc] initWithArray:playersArray copyItems:YES];

它不是深度副本,但只是原始数组的副本,内容字典仍然相同。文档中有任何东西会让你相信它是深度副本吗?它不是深度副本,但是只有一份原始数组的副本和内容字典仍然是一样的,文档中有任何东西会让你相信它是一份深度副本吗?我给你一个机会,尽快让你知道你说的DuplicatePlayerArray现在有不同的内容,谢谢。但现在,我无法更新它的内容。Xcode表示NSDictionary不支持setObject:ForKey:。然而,当我为PlayerArray运行代码时,我没有得到任何错误。不知何故,PlayerArray中的东西变得一成不变。有没有一种方法可以复制PlayerArray结果是可变的?或者只是以某种方式转换DuplicatePlayerArray?最好创建一个新问题,其中包含您在其中使用的确切代码。我尝试一下,会尽快让您知道您说过DuplicatePlayerArray现在有不同的内容,谢谢。但现在,我无法更新它的内容。Xcode表示NSDictionary不支持setObject:ForKey:。然而,当我为PlayerArray运行代码时,我没有得到任何错误。不知何故,PlayerArray中的东西变得一成不变。有没有一种方法可以复制PlayerArray结果是可变的?或者只是以某种方式转换DuplicatePlayerArray?最好创建一个新问题,其中包含您正在使用的确切代码。