NSDictionary中的NSMutableDictionary是否仍然可变?

时间:2014-04-30 18:46:13

标签: objective-c

问题就像标题一样简单:

NSDictionary中的NSMutableDictionary是否仍然可变? mdict下面是否可变?

NSMutableDictionary *mdict = [[NSMutableDictionary alloc] init];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:mdict, @"key", nil];

而且,NSMutableDictionary中的NSDictionary仍然是不可变的吗?

此外,如果是数组/集而不是字典呢?

3 个答案:

答案 0 :(得分:1)

绝对!将对象放入容器时,对象的可变性不会改变。

当您将可变字典放入另一个可变或不可变的集合时,该集合会添加对可变字典对象的引用,但不会以任何其他方式更改它。将不可变对象放入集合也是如此:集合引用这些对象而不改变它们的性质。

当您的对象在内存中时,这仍然是正确的。如果序列化然后反序列化,反序列化过程可能会消除可变性。例如,如果您将NSMutableDictionary保存到NSUserDefaults中,然后将其读回you would get back an immutable dictionary

答案 1 :(得分:1)

是。对象通常不知道他们什么时候被放入集合中,因此他们无法根据这些情况改变他们的行为。 NSDictionary确实复制了它的键(正是这样你可以在不影响字典的情况下更改原始对象),但它只存储了对该值的正常引用。

答案 2 :(得分:0)

只要你像这样访问你的变量

 NSMutableDictionary * tempDict = [mdict objectForKey: @"Key"];
 NSMutableDictionary * tempDict2 = [arrayVar objectAtIndex: index];

临时变量保留了之前的所有功能