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

时间:2012-12-20 13:08:12

标签: objective-c types immutability mutable

如果我的方法看起来像这样:

- (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

1 个答案:

答案 0 :(得分:5)

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

无论如何,返回选项2将返回NSMutableDictionary。将其投放到NSDictionary不会有任何区别

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