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

时间:2014-01-31 16:29:50

标签: ios iphone objective-c arrays deep-copy

我的单例类中有一个名为NSMutableArray的{​​{1}},它包含我的应用程序主数据源。 playersArray的每个对象都是playersArray,内容如下:

NSDictionary

{ sgfID = 1; sgfPlayer = "<PlayerContact: 0xbf851b0>"; } 是一个PlayerContact子类,包含以下属性: NSString * playerName,playerTeam,BOOL PlayerSelected等。

在我的一个ViewControllers中,在NSObject中,我想将viewDidLoad的深层副本复制到名为playersArray的{​​{1}}。我这样做是

NSMutableArray

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

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

duplicatePlayersArray

playerArray在索引处的字典:0在上面的代码行运行之前已经使用“333”作为关键字“sgfID”而不是“1”。

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

playersArray = [[SGFHelper sharedHelpers] SGFContactsArray];
duplicatePlayersArray = [playersArray mutableCopy];

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

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

1 个答案:

答案 0 :(得分:10)

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

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