Copy, Don't Retain NSString Properties
In general, @properties of type NSString*
should be copied, not retained:
@interface SomeClass : NSObject
@property (nonatomic, copy) NSString* someText;
@end
The reasoning behind this is that because NSString
is a class cluster, what appears to be an NSString
could really be an NSMutableString
, and thus could change behind your back—generally not something you want. However, if you specify copy
then the instance of SomeClass
will have it’s own unique copy of the original string.
It’s also worth mentioning in passing that calling the copy
method on a mutable object (NSMutableString
, NSMutableArray
, etc.) returns an immutable copy of the original object.