我有一个奇怪的问题。我有一个带字典的单身人士。该词典在运行时定期更新。在视图控制器中,我访问此单例字典并创建一个新的NSMutableArray。

@property (nonatomic, retain) NSMutableArray *myArray;

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

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

在对_myArray 进行任何操作之前,我会在计时器中监视_myArray值,并且似乎总是随着单例字典值而不断变化。

为什么以及如何创建独立于该字典单例的独立NSMutableArray?

最佳答案

这不是一个奇怪的问题,而是Objective-C的工作方式。您的单例数组只是对象引用的集合。您已经使用完全相同的引用填充了_myArray。一个中的所有修改都将被另一个反映,因为它们是相同的对象。

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

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

编辑:

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

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

10-15 15:29