Вы будете использовать copy
, если хотите гарантировать состояние объекта.
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString retain];
[mutString appendString:@"Test"];
В этот момент b была просто испорчена 3-й строкой.
NSMutableString *mutString = [NSMutableString stringWithString:@"ABC"];
NSString *b = [mutString copy];
[mutString appendString:@"Test"];
В этом случае b является исходной строкой и не изменяется 3-й строкой.
Это относится ко всем изменяемым типам.