This is a matter of copying mutable objects compared to immutable ones. Since NSString objects are immutable (you cannot change their contents), they implement -copy as follows:
- (id) copyWithZone: (NSZone *) zone { return [self retain]; }
If you think about it, there is no reason to duplicate an immutable object, because it is a waste of memory. On the other hand, NSMutableString objects can see a change in their contents during their lifetime, so if you request a copy of NSMutableString you will get a real copy, another object.
If your strings are not NSMutableStrings, it doesn't matter if you save or copy them. However, choosing the right method is important if you later reorganize your code to use NSMutableStrings. General logic should answer the following question: if I get an object whose contents can change outside, what value do I need? Most often you will want to make a copy.
source share