Objective c NSDictionary中的NSMutableDictionary仍然是可变的吗?

Objective c NSDictionary中的NSMutableDictionary仍然是可变的吗?,objective-c,Objective C,问题很简单,题目如下: NSDictionary中的NSMutableDictionary仍然是可变的吗?下面的mdict是可变的吗 NSMutableDictionary *mdict = [[NSMutableDictionary alloc] init]; NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:mdict, @"key", nil]; 那么,NSMutableDictionary中的NSDict

问题很简单,题目如下:

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

NSMutableDictionary *mdict = [[NSMutableDictionary alloc] init];
NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys:mdict, @"key", nil];
那么,NSMutableDictionary中的NSDictionary是否仍然是不可变的


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

当然!将对象放置到容器中时,对象的易变性不会改变

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


当对象在内存中时,这仍然是正确的。如果将其序列化,然后反序列化回来,反序列化过程可能会删除可变性。例如,如果将
NSMutableDictionary
保存到
nsserdefaults
中,然后将其读回,.

是。对象通常不知道何时放置到集合中,因此无法基于此更改其行为。NSDictionary确实复制了它的键(正是这样,您可以在不影响字典的情况下更改原始对象),但它只存储对值的正常引用。

只要您这样访问变量

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

temp变量保留了以前的所有功能

尝试时发生了什么?我只是好奇。我想知道是否还有其他情况,正如@dasblinkenlight所说的,序列化/反序列化可能是一种极端情况。