gpt4 book ai didi

iphone - 我们可以使用 NSMutable 对象作为非 NSMutable 类的成员吗

转载 作者:行者123 更新时间:2023-12-03 20:28:40 27 4
gpt4 key购买 nike

假设我们有一个简单的 NSDictionary 类,它的对象之一可以是 NSMutableDictionary 对象吗?当我们编辑 NSMutableDictionary 对象中的值时,我们只是编辑 NSDictionary 对象的值。既然我们没有编辑 NSDictionary 的对象,那么对于非可变的 NSDictionary 类来说这应该是一个问题吗?

最佳答案

集合类的可变性仅指修改集合作为一个整体的能力,而不是成员的能力。事实上,集合只是由指向它所包含的对象的指针组成;他们的一切都没有改变。将对象放入不可变集合中不会改变对象自身的修改能力。

所以,是的,您可以毫无困难地修改 NSDictionary 内的 NSMutableDictionary

NSDictionary * myDict;
myDict = [NSDictionary dictionaryWithObject:
[NSMutableDictionary dictionaryWithObject:@"This is one string"
forKey:@"sampleKey"]
forKey:@"mutableDict"];

NSMutableDictionary * myMutableDict = [myDict objectForKey:@"mutableDict"];

NSLog(@"%@", [myMutableDict objectForKey:@"sampleKey"];
// Prints "This is one string"

[[myDict objectForKey:@"mutableDict"] setObject:@"Not the same as before"
forKey:@"sampleKey"];

NSLog(@"%@", [myMutableDict objectForKey:@"sampleKey"];
// Prints "Not the same as before"

对于任何不可变集合中包含的任何对象(允许修改)也是如此:

@interface MyNeatObjectClass : NSObject {
NSString * neatString;
}

- (id)initWithNeatString:(NSString *)initialString;
- (void)setNeatString:(NSString *)newString;
- (NSString *)neatString;

MyNeatObjectClass * myObj = [[MyNeatObjectClass alloc] 
initWithNeatString:@"Example string"];

NSLog(@"%@", [myObj neatString]); // Prints "Example string"
NSArray * arr = [NSArray arrayWithObject:myObj];
[myObj release];

// instance of MyNeatObjectClass
[[arr objectAtIndex:0] setNeatString:@"Another string"];
NSLog(@"%@", [[arr objectAtIndex:0] neatString]); // Prints "Another string"

关于iphone - 我们可以使用 NSMutable 对象作为非 NSMutable 类的成员吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915711/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com