其实老实讲, 定义@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); //控制台输出123NSLog(@"tempCopyStr=11=%@",self.tempCopyStr); //控制台输出123NSLog(@"tempStrongStr=11=%@",self.tempStrongStr); //控制台输出123[valueStr appendString:@"456"]; //修改可变字符串valueStr的值NSLog(@"valueStr=22=%@",valueStr); //控制台输出123456NSLog(@"tempCopyStr=22=%@",self.tempCopyStr); //控制台输出123//控制台输出123456,问题就出现在这里了,我改变的是valueStr的值,关self.tempStrongStr什么事?//所以如果需要操作的字符串(数据源)是可变NSMutableString类型,则需要用copy,不能用Strong.NSLog(@"tempStrongStr=22=%@",self.tempStrongStr);