我有一个 NSMutableArray
调用playersArray
在我的单例类中,它适用于我的应用程序主数据源。playersArray
的每个对象是 NSDictionary
内容如下:
{
sgfID = 1;
sgfPlayer = "<PlayerContact: 0xbf851b0>";
}
PlayerContact
是 NSObject
包含以下属性的子类:NSString * playerName, playerTeam, BOOL PlayerSelected 等等。
在我的一个 ViewController 中,在
viewDidLoad
, 我要深拷贝playersArray
进入 NSMutableArray
命名为 duplicatePlayersArray
.我这样做是通过playersArray = [[SGFHelper sharedHelpers] SGFContactsArray];
duplicatePlayersArray = [playersArray mutableCopy];
现在我有两个单独的副本,我的印象是 playerArray 和 duplicatePlayersArray 是内存中两个完全不同的数组。但是我发现他们不是!
即使调试器显示它们具有不同的内存地址,它们的内容也具有相同的内存地址。所以当我这样做时:
[((NSMutableDictionary *)[duplicatePlayersArray objectAtIndex:0]) setObject:@"333" forKey:@"sgfID"];
索引:0 处的 playerArray 的字典也有“333”作为键“sgfID”,而不是之前运行上述代码行之前的“1”。
但是,如果我运行下面的代码,只有这样,两个数组才开始不同
[duplicatePlayersArray replaceObjectAtIndex:0 withObject:tempDict];
这仍然不能解决我的担忧,因为我想相信不同的两个数组仍然是“连接的”。一个改变,导致另一个数组改变它的内容。
各位 friend 能否告诉我一种方法来深度复制我解释过的数组的内容,其中所有内容都保存在不同的对象中。
最佳答案
使用initWithArray:copyItems:
复制数组中的每个条目
NSMutableArray *duplicatePlayersArray = [[NSMutableArray alloc] initWithArray:playersArray copyItems:YES];
关于ios - NSArray mutableCopy 创建新数组但仍指向旧内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21485098/