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

标签 ios iphone objective-c arrays deep-copy

我有一个 NSMutableArray调用playersArray在我的单例类中,它适用于我的应用程序主数据源。playersArray 的每个对象是 NSDictionary内容如下:

{
    sgfID = 1;
    sgfPlayer = "<PlayerContact: 0xbf851b0>";
}
PlayerContactNSObject包含以下属性的子类:
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/

相关文章:

iphone - CGAffineTransform旋转

iphone - 如何传递unichar对象?

c++ - static const byte ASCII 错误(可能是错误的实现)

objective-c - 如何播放简单的系统声音

ios - NSString localizedCompare : inconsistent results given longer strings

ios - 尝试访问另一个 scenedelegate 函数在场景委托(delegate)内创建的环境对象

iphone - Phonegap : How can I add a hash value to index. html 通过 Objective-C 在 webview 中?

iphone - OTA 注册 : MDM and SCEP

ios - 如何创建透明的 UITextField?

ios - 我应该在 iOS 的 NSString 中使用 "stringByExpandingTildeInPath"吗?