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);
相关推荐
依旧风轻5 小时前
深入理解 rsync daemon 模式(守护进程)
linux·ios·rsync·daemon·sqi
leluckys6 小时前
swift-oc和swift block和代理
开发语言·ios·swift
测试萧十一郎9 小时前
APP测试中ios和androis的区别,有哪些注意点
自动化测试·软件测试·功能测试·macos·ios·职场和发展·cocoa
鸿蒙布道师11 小时前
鸿蒙NEXT开发全局异常捕获与崩溃日志收集工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
鸿蒙布道师11 小时前
鸿蒙NEXT开发节流、防抖工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
依旧风轻14 小时前
深入解析 Jenkins Agent 的 .jnlp 启动文件
运维·ios·jenkins·agent·slave
leonyie202215 小时前
7.3 在通知中显示图片或视频(UNNotificationAttachment)
macos·ios·swiftui·音视频·cocoa·swift
鸿蒙布道师17 小时前
鸿蒙NEXT开发文件操作相关工具类(ArkTs)
android·ios·华为·harmonyos·arkts·鸿蒙系统·huawei
leonyie202217 小时前
3.1 在 AppDelegate 或 SwiftUI Lifecycle 中配置权限请求
ios·swiftui·cocoa
1024小神1 天前
在swiftui中使用实现类似微信右上角的功能菜单
ios