gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:19:16 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com