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