代碼解釋:
聲明兩個變量
@property (retain,nonatomic) NSString *rStr;
@property (copy, nonatomic)? NSString *cStr;
在viewDidLoad中添加如下代碼:
NSMutableString *mStr = [NSMutableString stringWithFormat:@"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);
NSString *mStr1 = [NSString stringWithFormat:@"abc"];
self.rStr? = mStr1;
self.cStr? ? = mStr1;
NSLog(@"mStr:%p,%p",? mStr1,&mStr1);
NSLog(@"retainStr:%p,%p", _rStr, &_rStr);
NSLog(@"copyStr:%p,%p",? _cStr, &_cStr);
[mStr1 stringByAppendingString:@"de"];
NSLog(@"retainStr:%@",? _rStr);
NSLog(@"copyStr:%@",? ? _cStr);
NSLog(@"mStr:%p,%p",? mStr1,&mStr1);
NSLog(@"retainStr:%p,%p", _rStr, &_rStr);
NSLog(@"copyStr:%p,%p",? _cStr, &_cStr);
輸出結(jié)果:
mStr:0x7f935ac05980,0x7fff533609f8
retainStr:0x7f935ac05980,0x7f935aeb6390
copyStr:0xa000000006362613,0x7f935aeb6398
?retainStr:abcde
copyStr:abc
mStr:0xa000000006362613,0x7fff533609f0
retainStr:0xa000000006362613,0x7f935aeb6390
copyStr:0xa000000006362613,0x7f935aeb6398
retainStr:abc
copyStr:abc
mStr:0xa000000006362613,0x7fff533609f0
?retainStr:0xa000000006362613,0x7f935aeb6390
copyStr:0xa000000006362613,0x7f935aeb6398
總結(jié): 把一個對象賦值給一個屬性變量嚷那,當(dāng)這個對象變化了颊亮,如果希望屬性變量變化就使用strong屬性把跨,如果希望屬性變量不跟著變化谁鳍,就是用copy屬性们拙。當(dāng)把NSMutableString賦值給NSString的時候稍途,才會有不同,如果是賦值是NSString對象砚婆,那么使用copy還是strong械拍,結(jié)果都是一樣的,因為NSString對象根本就不能改變自身的值装盯,它是不可變的.