如果我有一个看起来像这样的方法:
- (NSDictionary *)removeDataInDictionary:(NSDictionary *)dictionary {
NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];
[mutableDictionary removeObjectForKey:@"key"];
// Return option 1
return [NSDictionary dictionaryWithDictionary:mutableDictionary];
// Return option 2
return (NSDictionary *) mutableDictionary;
}
选项 1 在代码方面“更好”吗,因为它实际上会返回一个 NSDictionary
,而选项 2 实际上会返回一个伪装成 NSDictionary
的 NSMutableDictionary
?
最佳答案
返回选项 1 将创建一个不可变的 NSDictionary
对象,如果您不希望以任何方式对其进行编辑,这是可行的方法。
返回选项 2 无论如何都会返回一个 NSMutableDictionary
。将其转换为 NSDictionary
不会有任何区别
但是:调用此方法时,您会看到它返回一个 NSDictionary
,因此您必须在外部考虑它,因此除非您检查对象类然后将其转换为NSMutableDictionary 在你的方法之外,它在外面看起来是不可变的。
关于objective-c - 返回不可变对象(immutable对象)的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972902/