objective-c - 返回不可变对象(immutable对象)的首选方式

标签 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 实际上会返回一个伪装成 NSDictionaryNSMutableDictionary

最佳答案

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

返回选项 2 无论如何都会返回一个 NSMutableDictionary。将其转换为 NSDictionary 不会有任何区别

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

关于objective-c - 返回不可变对象(immutable对象)的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972902/

相关文章:

ios - Realm 结果对多个属性 ios 进行排序

objective-c - NSImage 泄漏?

objective-c - 退出时出现应用程序错误 - Objective-C

c++ - 类型衰减——它是什么以及为什么会存在?

c - 使用 %d 打印 char 变量值

c# - 是否有一种语言同时允许静态和动态类型?

ios - 在 iOS 设备中存储图像和文件

java - 这个类可以变得更加不可变吗?

java - 如何从 Java 中的特定字符串中删除特定字符?

algorithm - 具有不可变状态的二维数组处理