不可变对象中的可变对象

时间:2009-02-23 14:04:15

标签: iphone objective-c cocoa-touch

在NSDictionary中有一个NSMutableArray是否可以接受?或者NSDictionary也必须是可变的?

NSMutableArray将在运行时添加值,NSDictionary将始终具有相同的2个NSMutableArrays。

谢谢,

2 个答案:

答案 0 :(得分:3)

是的,这完全可以接受。请记住,数组的内容是NSMutableArrays的指针 - 这些是不可变字典结构中无法更改的内容。指针指向的内容可以改变你想要的一切。即:

NSMutableArray *arr = [[NSMutableArray alloc] init];
NSDictionary *dict = [NSDictionary dictionaryWithObject:arr forKey:@"test"];

[arr addObject:@"Hello"];
NSString *str = [[dict objectForKey:@"test"] objectAtIndex:0];
NSLog("%@", str);

答案 1 :(得分:0)

这是完全可以接受的。 但是,正是这种设置表明你应该认真考虑用一个NSObject子类替换字典,该子类有两个属性来访问数组。