都不希望字串的值跟着mStr变化,所以一般用copy来设置string的属性。
如果希望字串的值跟着赋值的字串的值变化,可以使用strong,retain。
@property (retain,nonatomic) NSString *rStr;
@property (copy, nonatomic) NSString *cStr;
NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];
self.rStr = mStr;
self.cStr = mStr;
NSLog(@"mStr:%p,%p", mStr,&mStr);
NSLog(@"retainStr:%p,%p", _rStr, &_rStr);
NSLog(@"copyStr:%p,%p", _cStr, &_cStr);
[mStr appendString:@"de"];
NSLog(@"retainStr:%@",_rStr);
NSLog(@"copyStr:%@", _cStr);
结果,
使用retain的字串rStr的值:@"abcde",
而使用copy的字串cStr的值:@"abc",
注:上面的情况是针对于当把NSMutableString赋值给NSString的时候,才会有不同,如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的。
网友评论