其实老实讲, 定义**@property 属性,**"使用Copy修饰,而不是用Strong修饰"这句话也不完全正确.因为如果他们对接的是不可变字符串,那么无论使用哪个都一样.
问题就出现在,如果他们对接的是可变字符串NSMutableString,那就得用copy
定义两个NSString 属性:
@interface ViewController ()
@property (nonatomic,copy)NSString * tempCopyStr;
@property (nonatomic,strong)NSString * tempStrongStr;
@end
如果将NSMutableString都分别赋值给他们,那么当NSMutableString改变时,strong修饰的tempStrongStr也会跟着改变,这个就不对啦.
代码如下:
NSMutableString * valueStr = [[NSMutableString alloc]initWithString:@"123"];
self.tempCopyStr = valueStr; //copy修饰
self.tempStrongStr = valueStr; //strong修饰
NSLog(@"valueStr=11=%@",valueStr); //控制台输出123
NSLog(@"tempCopyStr=11=%@",self.tempCopyStr); //控制台输出123
NSLog(@"tempStrongStr=11=%@",self.tempStrongStr); //控制台输出123
[valueStr appendString:@"456"]; //修改可变字符串valueStr的值
NSLog(@"valueStr=22=%@",valueStr); //控制台输出123456
NSLog(@"tempCopyStr=22=%@",self.tempCopyStr); //控制台输出123
//控制台输出123456,问题就出现在这里了,我改变的是valueStr的值,关self.tempStrongStr什么事?
//所以如果需要操作的字符串(数据源)是可变NSMutableString类型,则需要用copy,不能用Strong.
NSLog(@"tempStrongStr=22=%@",self.tempStrongStr);