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);
相关推荐
键盘敲没电4 小时前
【IOS】GCD学习
学习·ios·objective-c·xcode
SY.ZHOU4 小时前
Significant Location Change
macos·ios·cocoa
吴Wu涛涛涛涛涛Tao12 小时前
深入理解 Swift Codable:从基础到进阶
ios
Jouzzy18 小时前
【iOS安全】iPhone X iOS 16.7.11 (20H360) WinRa1n 越狱教程
安全·ios·iphone
二流小码农1 天前
鸿蒙开发:实现一个标题栏吸顶
android·ios·harmonyos
season_zhu1 天前
iOS开发:关于日志框架
ios·架构·swift
Digitally1 天前
如何在电脑上轻松访问 iPhone 文件
ios·电脑·iphone
安和昂1 天前
【iOS】YYModel源码解析
ios
pop_xiaoli1 天前
UI学习—cell的复用和自定义cell
学习·ui·ios
Daniel_Coder2 天前
Xcode 16.4 + iOS 18 系统运行时崩溃:___cxa_current_primary_exception 符号丢失的原因与解决方案
ios·xcode·ios 18·dyld·libc++abi