NSString 的时候用copy和strong的区别

本文详细探讨了在Objective-C中,当一个NSString属性是`copy`或`strong`时,接受一个NSMutableString赋值时的区别。使用`copy`可以确保NSString对象不受NSMutableString修改的影响,从而提供安全性。而`strong`则会导致NSString对象与NSMutableString对象指向同一内存位置,当NSMutableString变化时,NSString也会随之变化。讨论了不同属性类型在赋值NSMutableString和NSString对象时的行为,并强调了根据需求选择合适属性的重要性。
摘要由CSDN通过智能技术生成

用copy是为了防止mutable string被无意中修改, NSMutableString是NSString的子类, 因此NSString指针可以持有NSMutableString对象.

假如有一个NSMutableString,现在用他给一个retain修饰 NSString赋值,那么只是将NSString指向了NSMutableString所指向的位置,并对NSMUtbaleString计数器加一,此时,如果对NSMutableString进行修改,也会导致NSString的值修改,原则上这是不允许的. 如果是copy修饰的NSString对象,在用NSMutableString给他赋值时,会进行深拷贝,及把内容也给拷贝了一份,两者指向不同的位置,即使改变了NSMutableString的值,NSString的值也不会改变.所以用copy是为了安全,防止NSMutableString赋值给NSString时,前者修改引起后者值变化而用的.

1、
NSString *myString = @”sample string”;
NSString *newString = [myString copy];

NSMutableString is a subclass of NSString。NSString’s copy simply calls retain. NSMutableString’s copy makes an actual copy.

大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢?

比如:
@property (strong,nonatomic) NSString *sStr;
@property (copy, nonatomic) NSString *cStr;

  • (void)test:
    {
    NSMutableString *mStr = [NSMutableStringstringWithFormat:@”abc”];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值