Предпочтительный способ возврата неизменяемого объекта

Если у меня есть метод, который выглядит примерно так:

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

Возвращаемая опция 1 создаст неизменяемый объект NSDictionary, который является способом перехода, если вы не хотите, чтобы его редактировали каким-либо образом.

Возвращаемая опция 2 будет возвращать NSMutableDictionary в любом случае. Отбрасывание его на NSDictionary не имеет никакого значения.

ОДНАКО: При вызове этого метода вы увидите, что он возвращает NSDictionary, и поэтому вам придется рассматривать его как таковое снаружи, поэтому, если вы не проверите класс объекта, а затем внесите его в NSMutableDictionary вне вашего метода, он будет выглядеть неизменным снаружи.