Предпочтительный способ возврата неизменяемого объекта
Если у меня есть метод, который выглядит примерно так:
- (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 вне вашего метода, он будет выглядеть неизменным снаружи.