如果我的方法看起来像这样:
- (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实际上会将NSMutableDictionary
伪装成NSDictionary
?
答案 0 :(得分:5)
返回选项1将创建一个不可变的NSDictionary
对象,如果您不希望以任何方式对其进行编辑,那么这是一种可行的方法。
无论如何,返回选项2将返回NSMutableDictionary
。将其投放到NSDictionary
不会有任何区别
但是:当调用此方法时,您会看到它返回NSDictionary
,因此您必须在外面考虑它,所以除非您检查对象类然后将其转换为您之外的NSMutableDictionary方法,它看起来在外面是不可变的。