【发布时间】:2014-02-24 10:40:08
【问题描述】:
我的单例类中有一个名为playersArray 的NSMutableArray,用于我的应用程序主数据源。
playersArray 的每个对象都是一个NSDictionary,内容如下:
{
sgfID = 1;
sgfPlayer = "<PlayerContact: 0xbf851b0>";
}
PlayerContact 是一个 NSObject 子类,包含以下属性:
NSString * playerName, playerTeam, BOOL PlayerSelected 等等。
在我的一个 ViewController 中,在 viewDidLoad 中,我想将 playersArray 的深层副本放入名为 duplicatePlayersArray 的 NSMutableArray 中。我这样做是通过
playersArray = [[SGFHelper sharedHelpers] SGFContactsArray];
duplicatePlayersArray = [playersArray mutableCopy];
现在我有两个单独的副本,我的印象是 playerArray 和 duplicatePlayersArray 是内存中两个完全不同的数组。但是我发现它们不是!
即使调试器显示它们具有不同的内存地址,它们的内容也具有相同的内存地址。所以当我这样做时:
[((NSMutableDictionary *)[duplicatePlayersArray objectAtIndex:0]) setObject:@"333" forKey:@"sgfID"];
playersArray 的 index:0 处的字典也有“333”作为键“sgfID”,而不是之前运行上述代码行之前的“1”。
但是,如果我运行下面的代码,只有这样,两个数组才会开始不同
[duplicatePlayersArray replaceObjectAtIndex:0 withObject:tempDict];
这仍然没有解决我的问题,因为我想相信不同的两个数组仍然是“连接的”。一个改变,导致另一个数组改变它的内容。
各位朋友能否告诉我一种方法来深度复制我解释的数组的内容,其中所有内容都保存在不同的对象中。
【问题讨论】:
-
它不是深拷贝,只是原始数组的副本,内容字典仍然相同
-
文档中是否有任何内容让您相信它是深拷贝?
标签: ios iphone objective-c arrays deep-copy