gpt4 book ai didi

ios - NSMutableArray 在单例中使用 Dictionary 自动更新

转载 作者:行者123 更新时间:2023-12-01 18:42:49 26 4
gpt4 key购买 nike

我有一个奇怪的问题。我有一个带有字典的单例。该词典在运行时定期更新。在 View Controller 中,我访问这个单例字典并创建一个新的 NSMutableArray。

@property (nonatomic, retain) NSMutableArray *myArray;

在 viewDidload 中初始化它:
_myArray = [[NSMutableArray alloc] init];

然后在 viewDidAppear 中,我将数组分配给单例 NSMutableDictionary *myDict 值:
_myArray = [NSMutableArray arrayWithArray:[[[DataCenter singleton] myDict] allValues]];

在对 _m​​yArray 做任何事情之前,我在计时器中监视 _myArray 值,它似乎总是随着单例字典值不断变化。

为什么以及如何创建一个与此字典单例无关的独立 NSMutableArray?

最佳答案

这不是一个奇怪的问题,它是 Objective-C 的工作原理。您的单例数组只是对象引用的集合。您已填写 _myArray与那些完全相同的引用。一个中的所有修改都将被另一个反射(reflect),因为它们是相同的对象。

为了实际制作新对象,您需要制作副本。像这样的东西:

_myArray = [[NSMutableArray alloc] initWithArray:[[[DataCenter singleton] myDict] allValues] copyItems:YES];

编辑:

我无法使用 [[[DataCenter singleton] myDict] allValues] 进行测试在我的编译器中,但是如果您想尝试使用 deepCopy 和数组,这是一个人为的示例。
NSArray *array = [NSArray arrayWithObject:@"foo"];
NSMutableArray* _myArray = [[NSMutableArray alloc] initWithArray:array copyItems:YES];

关于ios - NSMutableArray 在单例中使用 Dictionary 自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40623804/

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