Вы не показали свой код, но я подозреваю, что вы сделали, объявили свойства name
и mutableName
и реализовали их для использования того же самого ивара под капотом. В этом случае ваше свойство mutableName
, объявленное как NSMutableString
, фактически возвращает NSString
, которое было присвоено свойству name
. Если это то, что вы делаете, и вы действительно хотите, чтобы это работало таким образом, то вам нужно изменить свои name
аксессоры так, чтобы они выглядели следующим образом (при условии, что _name
является резервным ivar):
- (NSString *)name {
return [[_name copy] autorelease]; // take a snapshot of the string
}
- (void)setName:(NSString *)name {
[_name release];
_name = [_name mutableCopy];
}
Таким образом, строка сохраняется как изменяемая под капотом, но возвращается как неизменная строка при использовании средства доступа name
.