If you have a property like so:
@property (nonatomic, copy) NSString *name;
Then someone could write this code:
NSMutableString *myName = [NSMutableString stringWithString:@"Christian"];
self.name = myName;
Since NSMutableString is a kind of NSString, then you want to use copy so that if someone uses a mutable subclass, an immutable copy is created (an NSString in this case).
Additionally, immutable subclasses essentially optimize out copy messages, so while it is wasteful in theory to copy an immutable class, in practice there is no effect.