返回不可变对象的首选方法

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

Ism*_*ael 5

返回选项1将创建一个不可变NSDictionary对象,如果您不希望以任何方式对其进行编辑,这是可行的方法.

返回选项2仍将返回NSMutableDictionary.将它投射到一个NSDictionary将没有任何区别

但是:当调用这个方法时,你会看到它返回一个NSDictionary,因此你必须在外面考虑它,所以除非你检查对象类然后将它转换为方法之外的NSMutableDictionary,否则它将在外部看起来是不可变的.