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

ayt*_*nch 1 arrays iphone objective-c deep-copy ios

我在我的单例类中有一个NSMutableArray调用playersArray,它为我的应用程序主数据源保存.每个对象playersArray都是a NSDictionary,内容如下:

{
    sgfID = 1;
    sgfPlayer = "<PlayerContact: 0xbf851b0>";
}
Run Code Online (Sandbox Code Playgroud)

PlayerContact是一个NSObject包含以下属性的子类:NSString*playerName,playerTeam,BOOL PlayerSelected等.

在我的一个ViewControllers中viewDidLoad,我想把一个深入的副本playersArray带到一个NSMutableArray命名的duplicatePlayersArray.我是这样做的

playersArray = [[SGFHelper sharedHelpers] SGFContactsArray];
duplicatePlayersArray = [playersArray mutableCopy];
Run Code Online (Sandbox Code Playgroud)

现在我有两个单独的副本,我的印象是playersArray和duplicatePlayersArray是内存中两个完全不同的数组.但是我发现它们不是!

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

[((NSMutableDictionary *)[duplicatePlayersArray objectAtIndex:0]) setObject:@"333" forKey:@"sgfID"];
Run Code Online (Sandbox Code Playgroud)

playersArray的索引字典:0在上面的代码行运行之前已经使用了"333"作为关键字"sgfID"而不是"1".

但是,如果我运行下面的代码,那么两个数组开始不同

[duplicatePlayersArray replaceObjectAtIndex:0 withObject:tempDict];
Run Code Online (Sandbox Code Playgroud)

这仍然没有解决我的担忧,因为我想要相信的两个阵列仍然是"连接"的.一次更改会导致另一个数组更改其内容.

请各位朋友请给我一个深入复制数组的方法我解释了内容,其中所有内容都保存在不同的对象中.

Dav*_*unt 10

使用initWithArray:copyItems:每个条目阵列中的复制

NSMutableArray *duplicatePlayersArray = [[NSMutableArray alloc] initWithArray:playersArray copyItems:YES];
Run Code Online (Sandbox Code Playgroud)