NSMutableArray 在单例中使用字典自动更新
NSMutableArray auto updates with Dictionary in singleton
我有一个奇怪的问题。我有一个带有字典的单身人士。该字典在运行时定期更新。在 viewcontroller 中,我访问了这个单例字典并创建了一个新的 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 和数组进行试验。
NSArray *array = [NSArray arrayWithObject:@"foo"];
NSMutableArray* _myArray = [[NSMutableArray alloc] initWithArray:array copyItems:YES];
您需要按如下方式复制该对象:
_myArray =[[NSMutableArray arrayWithArray:[[[DataCenter singleton] myDict] allValues]]mutableCopy];
我有一个奇怪的问题。我有一个带有字典的单身人士。该字典在运行时定期更新。在 viewcontroller 中,我访问了这个单例字典并创建了一个新的 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 和数组进行试验。
NSArray *array = [NSArray arrayWithObject:@"foo"];
NSMutableArray* _myArray = [[NSMutableArray alloc] initWithArray:array copyItems:YES];
您需要按如下方式复制该对象:
_myArray =[[NSMutableArray arrayWithArray:[[[DataCenter singleton] myDict] allValues]]mutableCopy];