iOS NSString 使用Copy修饰,而不使用Strong修饰

其实老实讲, 定义**@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);
相关推荐
xixixin_2 小时前
【H5】禁止IOS、安卓端长按的一些默认操作
android·css·ios·h5
叽哥2 小时前
flutter学习第 17 节:项目实战:综合应用开发(下)
android·flutter·ios
Andy_GF3 小时前
纯血鸿蒙 HarmonyOS Next 调试证书过期解决流程
前端·ios·harmonyos
叽哥6 小时前
flutter学习第 16 节:项目实战:综合应用开发(上)
android·flutter·ios
2501_915909068 小时前
iOS 签名证书全生命周期实战,从开发到上架的多阶段应用
android·ios·小程序·https·uni-app·iphone·webview
_oP_i8 小时前
ios添加ic卡如何操作?
ios
m0_6410310516 小时前
什么是iOS超级签名?为何它能解决企业签名的“掉签”难题?
ios
没事学AI20 小时前
移动端调用大模型详解
ios·大模型·安卓
叽哥1 天前
flutter学习第 14 节:动画与过渡效果
android·flutter·ios
2501_915918411 天前
iOS 文件管理全流程实战,从开发调试到数据迁移
android·ios·小程序·https·uni-app·iphone·webview