用copy是为了防止mutable string被无意中修改, NSMutableString是NSString的子类, 因此NSString指针可以持有NSMutableString对象.
假如有一个NSMutableString,现在用他给一个retain修饰 NSString赋值,那么只是将NSString指向了NSMutableString所指向的位置,并对NSMUtbaleString计数器加一,此时,如果对NSMutableString进行修改,也会导致NSString的值修改,原则上这是不允许的. 如果是copy修饰的NSString对象,在用NSMutableString给他赋值时,会进行深拷贝,及把内容也给拷贝了一份,两者指向不同的位置,即使改变了NSMutableString的值,NSString的值也不会改变.所以用copy是为了安全,防止NSMutableString赋值给NSString时,前者修改引起后者值变化而用的.
1、
NSString *myString = @”sample string”;
NSString *newString = [myString copy];
NSMutableString is a subclass of NSString。NSString’s copy simply calls retain. NSMutableString’s copy makes an actual copy.
大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢?
比如:
@property (strong,nonatomic) NSString *sStr;
@property (copy, nonatomic) NSString *cStr;
- (void)test:
{
NSMutableString *mStr = [NSMutableStringstringWithFormat:@”abc”];