NSString属性为什么要用copy

NSString属性为什么要用copy,第1张

关于NSString作为属性的时候为什么要用copy,而非strong:

1、首先copy 分为深拷贝和浅拷贝,深拷贝是拷贝内容并存放到另一份内存空间,浅拷贝是指针拷贝,会随着内存中对象值的变化而变化;
2、NSString copy 浅拷贝 得到NSString
NSMutableString copy 深拷贝 得到NSString
NSString mutableCopy 深拷贝 得到NSMutableString
NSMutableString mutableCopy 深拷贝 得到NSMutableString
(NSArray、NSMutableArray;NSDictionary、NSMutableDictionary 同理NSString、NSMutableString)
3、回答上面问题:假如NSString属性用strong(注:strong是浅拷贝)修饰,如果源字符串是NSMutableString赋值给该属性,那么实际得到的也是一个NSMutableString,当源字符串变化的时候,属性也被修改了,这样是不安全的;而用copy修饰NSString属性,不管源字符串是NSString还是NSMutableString,得到的都是一个不可变的字符串,就不存在被修改源字符串的安全问题;

例如:
1、下面代码 执行完,self.strongString会变成@“123456”
@property (nonatomic , strong) NSString *strongString;
NSMutableString *aStr = [[NSMutableString alloc] initWithString:@“123”];
self.strongString = aStr;
[aStr appendString:@“456”];

2、而下面代码 执行完,self.string依然是@“123”
@property (nonatomic , copy) NSString *string;
NSMutableString *bStr = [[NSMutableString alloc] initWithString:@“123”];
self.string = bStr;
[bStr appendString:@“456”]

总结:使用copy拷贝出来的是不可变的, 就不存在修改源字符串而改变新字符串值的说法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/993400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存