10

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

- (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 在代码方面是否“更好”,因为它真的会返回 aNSDictionary而选项 2 实际上会返回NSMutableDictionary伪装成 a 的NSDictionary

4

1 回答 1

5

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

返回选项 2 将返回一个NSMutableDictionary反正。将其转换为 aNSDictionary不会有任何区别

但是:当调用此方法时,您会看到它返回 an NSDictionary,因此您必须将其视为外部对象,因此除非您检查对象类然后将其强制转换为方法外部的 NSMutableDictionary,否则它在外部看起来是不可变的。

于 2012-12-20T13:11:55.087 回答