Pet*_*rbo 10 types objective-c mutable immutability
如果我有一个看起来像这样的方法:
- (NSDictionary *)removeDataInDictionary:(NSDictionary *)dictionary {
NSMutableDictionary *mutableDictionary = [dictionary mutableCopy];
[mutableDictionary removeObjectForKey:@"key"];
// Return option 1
return [NSDictionary dictionaryWithDictionary:mutableDictionary];
// Return option 2
return (NSDictionary *) mutableDictionary;
}
Run Code Online (Sandbox Code Playgroud)
选项1是否"更好"代码化,因为它真的会返回一个while NSDictionary选项2实际上会NSMutableDictionary伪装成一个NSDictionary?
返回选项1将创建一个不可变NSDictionary对象,如果您不希望以任何方式对其进行编辑,这是可行的方法.
返回选项2仍将返回NSMutableDictionary.将它投射到一个NSDictionary将没有任何区别
但是:当调用这个方法时,你会看到它返回一个NSDictionary,因此你必须在外面考虑它,所以除非你检查对象类然后将它转换为方法之外的NSMutableDictionary,否则它将在外部看起来是不可变的.